我是 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/