您的位置:首页 > 其它

7、数组1---(定义、a,&a,&a[0]区别、以指针形式访问和以下标形式访问)(

2011-08-23 14:13 344 查看
 
1.数组定义

 当定义一个数组a时,编译器根据指定的元素个数和元素类型分配确定大小(元素个数*sizeof(元素类型))的一块内存,并把这块内存的名字命名为a

           eg: int a[5]

           sizeof(a)=20

           sizeof(a[0])=4

           sizeof(a[5])=4  
这里sizeof(a[5]) ? = 4呢

    首先,sizeof是个关键字,不是函数;函数求值是在运行的时候,而关键字sizeof求值是在编译的时候。虽然a[5]这个元素并不存在,但是这里编译器并没有真正的去访问它,而是仅仅根据数组元素的类型来确定其值,即sizeof(a[5]) = sizeof(int) = 4

 

2.数组中a,&a,&a[0]区别

          eg: int a[5]

          a:表示数组首元素的地址,与&a[0]相同

          &a:表示数组的首地址

          &a[0]:与a相同

          但是这三个的值大小是相等

          PS:数组名不能作为左值

 

3.以指针形式访问和以下标形式访问

            char *p = "654321";    

 以指针形式访问指针(读取2):*(p + 4)    //先取出p里面存储的地址值,再加4个char型偏移

 以下标形式访问指针(读取2):p[4]       //编译器总是把以下标形式的操作解析为以指针的形式操作

 

            char a[] = "fedcba";

 以指针形式访问数组(读取d):*(a+4)      //这里的a = &a[0]

 以下标形式访问数组(读取d):a[4]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  编译器 存储
相关文章推荐