自学到数组的首地址这里有点疑惑,不知道我的理解是否是正确的。
自学到函数这一章,如图红线所述,数组a的首地址为2000,那么为何a[0],b[0]都占用2000和2001单元。这个意思是不是说,一个整型数占2个字节,一个字节就是一个地址也就是一个单元,那么2000和2001这两个单元也就等于是两个地址或者说是两个字节,被a[0],b[0]共同占有。那么a[1],b[1]共同占有2002和2003两个单元也就是两个地址,也就是两个字节。。。
这样理解对么~?
其实单元就是字节也就是地址,都是一个东西,指的就是内存的大小,对吧~?
[解决办法]
仔细一想想楼主好像又没错,如果 a[0]是指向2k, 那么 a[1]应该指向2k+4的地址,也就是 2004.才是a[1]指向的地方。
不过还是有疑问的是 两个不同的数组指向的地址应该也是不同的吧?不会a数组和b数组都指向同一个地址??
[解决办法]
我也刚自学到指针,进度跟你差不多,呵呵。
我之前曾有过楼主这个问题,我是认同楼主的说法的,至于验证的话,可以用后面的指针验证(我没有验证过,我刚开始指针的学习)。
建议楼主继续学习下去,你不觉得一路学下来教材关于这个问题几乎是没有被讨论的吗?不必把细节纠结死一个地方。等后面学到了相关知识再回头也不晚。
个人意见。
[解决办法]
数组名可以代表数组的地址,当数组作为函数参数时,实际上传给形参的只是这个数组的地址而已,没有涉及到数据的拷贝,函数还是对原来的数组进行操作,书上只是为了方便才这样画的,实际上还是操作原来的数组。数组在内存中是连续分配的一块内存空间,就相当于一列火车,每一节车厢都有一个编号(相当于数组元素地址),每一节车厢里都装有乘客物品(乘客物品就相当于是数据本身)。
[解决办法]
编译器对各种数据形式的实现不同,不一定int就是两个字节,有的编译器中int是四个字节
好像在哪本书里看到过这样一句话,好像是:C标准不保证各数据类型的实际位数,但保证short不比int长,int不比long长。。。
具体的不记得了,希望我没有误导人。。。
[解决办法]
形参传递数组时,数组名会退化为指针进行运算,也就是函数的传址调用。
在函数中操作的数组b与数组a本就是同一数组。
[解决办法]
1.形参b不是数组!只不过b[i]可以象“数组[下标]”那样引用数组元素而已。至此为止,没有学到指针的初学者至此为止,不要瞎“探索"了,自己“悟”出来的东西可能是学习指针的障碍
2.形参b是指针变量,实参数组名a只是把首元素的地址“&a[0]"传给了b,...b并不知道这是个数组及元素个数等。用sizeof(b)就能检验