首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

数组地址?解决方法

2013-01-22 
数组地址?《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不用老换马甲,专一点比较好。

热点排行