C语言基础、C语言指针、合适的数据类型、内存中的数值的疑问
下面的代码输出结果会是什么?是我以前老师给我的,当时弄明白了,最近重看又是一脸懵逼,求解释啊!
int a[1024];
int i = 0;
char c = 300;
short *p;
for(i;i<1024;i++)
{
*(a+i) = i;
}
p = &a+1;
p--;
printf("%d %d",*p,c);
注:输出结果还需要分“大字节序”“小字节序”两种情况,谢谢各位大神!
另外多问一个问题
int *a[3];
int (*a)[3];
这两者有什么区别吗?我想问的是括号在这种数据类型的声明、定义中,与*的优先级
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
a
是int
数组。一般是4个字节一个。short
一般是两个字节一个。用一个两个字节的指针去access 4个字节为单元的地址,就要考虑 big endian 还是 little endian啦。int *a[3];
int (*a)[3];
[ ]优先级大于*
第一个等价于 ( int ※ ) a[ 3 ] ,创建一个数组 a[ 3 ],数组每个元素是一个指针(int*)
第二个 表达式看上去,很绕。先看看一个好理解的。
int pa[ 3] ;
a = & pa;
a 其实是一个指向数组的指针,类型可以理解为 int **
一个很有趣的点,a++,a指针向后移动12个字节( 3*4),好好的结合二维数组理解
输出不仅要分字节序讨论,还得就int和short所占的字节进行讨论。你没说你的编译器上这两个分别占几字节。。。
我得知道sizeof(int)和sizeof(short)是多少。。。