c - 使用指针的 3d 数组

标签 c pointers multidimensional-array

我是 C 编程的新手。目前正在尝试使用指针学习 3d 数组。下面是我正在尝试调试的程序。任何人都可以解释下面给出的两个程序之间的区别吗?

代码1:

#include <stdio.h>
int main()
{
    int a;
    int d[2][2][2] = {1, -2, -3, 0, -9, -1, 3, -1};
    printf("%d\n",*(*(*(d +1)+1)+1));
    if(*(*(*(d +1)+1)+1) <(a= sizeof( int )))
        puts(" u got it ");
    else
        puts (" but wrong");
    return 0;
}

代码2:

#include <stdio.h>
int main()
{
    int a;
    int d[2][2][2] = {1, -2, -3, 0, -9, -1, 3, -1};
    if(*(*(*(d +1)+1)+1) <(sizeof( int )))
        puts(" u got it ");
    else
        puts (" but wrong");
    return 0;
}

在第一个代码中,我得到了[…不完整…]

最佳答案

int d[2][2][2] = {1, -2, -3, 0, -9, -1, 3, -1};

初始化器没有完全支撑,但在这种情况下,初始化器应用于内存中数组的下一个元素,所以这分配了 d[0][0][0] = 1 , d[0][0][1] = -2 , d[0][1][0] = -3

printf("%d\n",*(*(*(d +1)+1)+1));

满是星星的东西是一种混淆的写法d[1][1][1] . X[Y]的定义是*(X+Y) .

(a= sizeof( int )))

赋值表达式的类型是左侧操作数的类型。所以第一个程序做(int)-1 < (int)4 .第二个程序执行 (int)-1 < (size_t)4 . (假设您的整数有 4 个字节大)。

在第一种情况下,这是 true .在第二种情况下,它是类型不匹配。在比较发生之前必须修复类型不匹配。 C 的规则说,在这种情况下,有符号类型被转换为无符号类型,给出 (size_t)-1 < (size_t)4 .自 (size_t)-1实际上是最大可能的size_t值,这个比较是false .

关于c - 使用指针的 3d 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25041588/

相关文章:

c - 将 Selenium 与 C 结合使用

c - sqrt() - 为什么我可以提供 int 参数而不仅仅是 double 并且输出也是正确的?

c - 传递给函数的指针不重新分配

c - 指针算术 :++*ptr or *ptr++?

java - 打印 3d 数组中的所有值

matlab - 如何在Matlab中对多维矩阵的行进行排序而不改变第一列中元素的顺序?

c - while(scanf) : why does using getchar() keep the input going 输入问题

c - scanf() 将换行符保留在缓冲区中

c - 矩阵幂和指针

arrays - 如何测试多维数组?