假定a为一个整形数组名,则元素a[4]的字节地址为_______.
来源:百度知道 编辑:UC知道 时间:2024/06/27 08:18:25
正确答案好像是C,就是不知道为什么。请给出相应的解释,谢谢~
看谭浩强教授的《C程序设计》
a是数组,a数组的地址也就是数组中第一个元素的地址为a[0],如果想算a[i]的地址套下面的公式:a[0]+i*d,其中d为该数组类型所占的字节数,Turbo C++中int占二字节,而VC++中是4字节,现在一般不用Tubro C++了,d是4个字节,所以a[4]=a[0]+4*4
d
首先a若表示数组名,则a等价于数组首个元素的地址,即a[0]的地址。数组在内存中是以线性的方式连续存储的,就是a[0]、a[1]、a[2]···这样连续存放。其中一个元素的地址可由首地址加上偏移量计算出,即a[i]的地址 = a[0]的地址 + i * 数组元素类型所占的字节数。
所以:
a[4]的字节地址 = a[0]的地址 +4 * 数组元素类型所占的字节数 = a + 4 * 整形类型所占的字节数 = a + 4 * 4 = a + 16
严格来说,此题应给出计算机的字长。16位和32位的计算机结果就不同了。上面的结果是32位的计算机的结果,此时整形类型所占的字节数为4,若是16位的计算机,整形类型所占的字节数为2,则答案应为 a + 4 * 2 = a + 8。
应该是答案A吧,数组名a就是指向第一个元素的地址,a+4就是第四个元素的地址。
这个要看在哪种系统了,如果是DOS系统,由于DOS系统是16位的,一个整数占2个字节,则a[4]的字节地址为 a+4*2,答案就是B.如果是win XP系统,由于是32位系统,一个整数占4个字节,则a[4]的字节地址为 a*4*4,答案就是C,明白了吧?
a正确
应该是a+4
指针的加减是和指针类型相关的,比如char用1byte,int用4byte,则:
char *p_char;
char v_char;
int *p_int;
int v_int;
如果v_char和v_int的地址都是1,则经过如下运算:
p_char = &v_char;
p_int = &v_int;
p_char++;
p_int++;
后,p_