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

来源:互联网 发布:淘宝网上超市怎么开 编辑:程序博客网 时间:2024/06/08 20:02
 

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]