【发布时间】:2014-08-03 00:00:59
【问题描述】:
我是 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;
}
在第一个代码中,我得到 [...incomplete...]
【问题讨论】:
-
相关:stackoverflow.com/questions/1683432 肯定是重复的(不过也许有更好的)。寻找整数提升,
(size_t)-1是SIZE_MAX,它不小于int的大小。第一个 sn-p 中的赋值将size_t转换为int,因此不会提升<的左操作数。 -
嗯?我在这篇文章中没有看到
size_t,但我看到sizeof(int)可能是 4。 -
@david 是 sizeof(int) 是 4。分配给变量 a 后,它有什么区别。代码之间有什么区别?
-
@DavidGrayson:
sizeof运算符的结果是size_t类型,它是无符号的。 -
-1 < sizeof(int): resultssizeof由于无符号,-1 通过转换为无符号进行比较。-1 < (a=sizeof(int)): results (a=sizeof(int)) 自签名以来(因为a的类型是signedint)。
标签: c pointers multidimensional-array