首页 > C语言基础、C语言指针、合适的数据类型、内存中的数值的疑问

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];

这两者有什么区别吗?我想问的是括号在这种数据类型的声明、定义中,与*的优先级


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)是多少。。。


aint数组。一般是4个字节一个。short一般是两个字节一个。用一个两个字节的指针去access 4个字节为单元的地址,就要考虑 big endian 还是 little endian啦。

[][][][]
^ 这里
    ^ 还是这里
     
【热门文章】
【热门文章】