数组地址?解决方法
数组地址?《C语言程序设计 现代方法》第12章 指针和数组12.2指针用于数组处理int main() {int a[10]{0,1,2,
数组地址?
《C语言程序设计 现代方法》
第12章 指针和数组
12.2 指针用于数组处理
int main()
{
int a[10]={0,1,2,3,4,5},sum=0,*p;
for(p=&a[0];p<&a[10];p++)
sum+=*p;
printf("%d\n",sum);
}
尽管元素a[N]不存在(数组a的下标从0到N-1),但是对它使用取地址运算符是合法的。因为循环不会尝试检查a[N]的值,所以在上述方式下使用a[N]是非常安全的。
-------------------------------------
1.a[N]的值不确定,其地址为什么说是非常安全?
[解决办法]
C语言定义一变量时,它会为其分配内存地址。
没分配的地址,怎么知道它是安全。
但是内在已经存在了啊!所以你分配的只是在内在中分出来一块内在而已
比如数组a[3]:
内存地址从0xaaaaaaa0给你分配a[0]
0xaaaaaaa0: a[0]
0xaaaaaaa4: a[1]
0xaaaaaaa8: a[2]
0xaaaaaaac: ....
0xaaaaaab1: ....
虽然a[2]后面的你没用,但是内存地址还是存在的哟,可能没有被分配而已
所以你取0aaaaaaac是没有问题的,但是你要改0xaaaaaaac里面的内容就有问题了
[解决办法]尽管a[N]不存在(实际上,由于a[N]没有定义,其值在有些系统里是随机的),但是&a[N]是存在的,因为数组元素的地址是连续分配的,&a[N]就是&a[N-1]的下一个地址(除非在分配数组a后内存用完了。。这种情况几乎不会出现吧)。
[解决办法]对于人来说,只有a[0]到a[9],对于机器来说a[100]都有,只是那不是你能用的,你只能用0到9的。
这就是物理的与逻辑的差异。
另外LZ不用老换马甲,专一点比较好。