【发布时间】:2016-10-18 12:20:55
【问题描述】:
在下面的程序中,
#include<stdio.h>
int main(){
int a = 1025;
int *p;
p = &a;
char *p0;
p0 = (char *)p;
//print("\n%d %d", *p0, *(p0+1));
printf("\n%d and %d", *p0, p0[1]);
}
输出:
1 和 4
char & int是C中的算术类型,要理解类型转换后的输出,我需要理解1025的二进制表示,即00000000 00000000 00000100 00000001。 Intelarch 的小字节序将占用第一个字节 00000001。
问题:
对于上述用java编写的程序,不能使用数组表示法访问int的每个字节。
在上面的 C 程序中,数组表示法可以交替用于访问int 的每个字节。
根据这个程序,数组与 C 中的指针有什么不同?
【问题讨论】:
-
数组是元素的连续序列。
-
@JoachimPileborg 与 Java 中的一维数组相同
-
您的程序中没有数组。
p[x]只是*(p + x)的简写。 -
@overexchange 您链接的评论描述了算术值的转换,而不是指针。
-
"我需要了解1025的二进制表示" 二进制表示也可以是
00000001 00000100 00000000 00000000。这就是你所拥有的,因为你得到了输出1 4。这是因为 CPU 字节序。