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]
相关文章推荐
- 以指针的形式和以下标的形式访问指针?以指针的形式和以下标的形式访问数组?
- 数组长度为零和空引用的区别 files!=null&files.length()>0 空指针或赋空值
- sizeof 数组名和指针的区别
- 指向数组的指针&数组名和指针的区别
- 数组和指针的区别(a和&a以及&a[0]的区别)
- 以指针方式访问数组几种不同形式输出语句解析
- c语言:sizeof的使用,其不是函数,是一个操作符关键字,定义一个数组arr,输出arr和&arr的区别
- const int *a, int const *a,int * const a,区别,指针数组,数组指针,声明与定义
- 堆和栈的区别&字符数组,字符指针,sizeof的总结(转)
- C语言_指针和数组的几种访问形式
- C语言学习7 :二级指针定义,强制转换,多级指针初步,6级指针构造,错误应用*p=&a,错误应用 二级p2,void型指针的兼容性,malloc函数基本用法,malloc分配空间和堆栈空间的区别,验证malloc函数内存的分配,验证malloc函数的越界,内存泄漏,指针不能返回局部变量地址,内存分配
- 关于数组的a和&a的区别:一个是普通的指针,一个是数组的指针
- C语言中指针和数组的几种访问形式
- “定义为指针,外部以数组形式引用”和“定义为数组,外部以指针形式引用”会发生什么?
- 数组和指针的区别(a和&a以及&a[0]的区别)
- 指针定义字符串和数组定义字符串的区别
- a和&a的区别以及数组和指针的用法
- 指针与数组--a与&a区别
- 指针数组和数组指针的区别&指针函数和函数指针的区别
- const int *a, int const *a,int * const a,区别,指针数组,数组指针,声明与定义