假定a为一个整形数组名,则元素a[4]的字节地址为_______.

来源:百度知道 编辑:UC知道 时间:2024/06/27 08:18:25
A.a+4 B.a+8 C.a+16 D.a+32
正确答案好像是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_

假定一维数组a[n]中的元素值均在[0,200]区间内,用C++编写一个算法 有一个含有10元素的整形数组,将其元素逆序存放 假定一维数组a[n]中的每个元素值均在[0,200]区间内,用C++编写一个算法,统计在个区间内的元素数 已知一个整型数组a[5],其各元素值为4,6,8,10,12。使用指针求该数组元素之积 输入一个三行四列的矩阵,求出所有元素的平均数(整形、二维数组) 写出一个主函数,为一维整型数组a[10]输入数据,并对数组中的数据进行转置,然后输出此数组中的元素。 编写一个程序,逆序放置a数组中的元素 允许建立一个以汉字为元素的数组吗? 使用C语言定义一个二维整形数组a[][20]的多个问题 int a[10];定义a为整形一维数组 是什么意思,请各位大老帮帮忙,解析一下....