数组名可以当作一个指针来用,数组名可以用*取其中的值,指针也可以用[]解引用,但它
们还是有一些区别的,我知道的有3个:
1.数组名不可以作为左值,关于这一点,可以将数组名理解为指针常量
。
int a[10],*b;
b是一个指针型变量,a是一个数组。
b是左值,可以存在b=a;
a不是左值,不能出现在"="左边。
a相当于一个常量,类型为数组。
2.对数组名进行sizeof运算时,结果是整个数组占用空间的大小,而sizeof(指针)得到的值
是编译器分配给指针(也就是一个地址)的内存空间。(对于比较老的编译器如TC,指针所占
字节数通常是2,对于现在常见的编译器一般是4)
3.对数组名作&(取地址)运算,得到的还是数组第一个元素的地址,对指针取地址时得到的
结果是指针所在的地址,也就是指向这个指针的指针。
4 运算
一维数组和指针在"*"运算是都有访存操作。
多维数组在"*"运算只是类型改变,没有具体操作。
指针变量在"*"运算时先访存,获得地址,再取地址对应内存中的值。
指针变量在"&"运算时,得到指针变量的地址。
数组在"&"运算只是类型改变,没有具体操作。
获取数组大小之方法:
# define size_of_array( x) ( sizeof ( x) / sizeof ( x[ 0] ) )
5 字符串指针与字符数组之区别:
char * p1 = "Hello World" ; //分配字符串常量,然后赋给 p1
char p2[ 20] = "Hello World" ; //分配一个数组,然后初始化为字符串
p1可以指向别的地方,但hello world不能更改,
eg:
* p1 = 'h' ;
p2不能指向别的地方,但hello world可以更改
eg:
p2[ 0] = 'h' ;
第一个字符串指针的操作等价于:
const char S[ 12] = "Hello World" ;
char * p1;
p1 = & S; // p1 = S;
char p2[ 20] ;
strcpy ( p2, S) ;
分享到:
相关推荐
指针数组和数组指针的区别 数组指针(也称行指针) 定义 int (*p)[n]; ()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型...
彻底理解指针,指针数组和数组指针,指针函数和函数指针.doc
指针数组和数组指针的区别
指针进阶之指针数组和数组指针
C语言中指针和数组区别的分析.pdf
java双指针和数组.zip
为什么会出现指针和数组指针对数组元素调用的方式不同呢? 答:*p是一个指针变量,p指向的其实是a[0]或a[0][0]; 而(*p)[2]是一个数组指针,p指向的其实是a[0],a[1]或a[0][0],a[0][1]这样的形式; 也就是说*p中的p...
识别const到底是修饰指针还是指针所指的对象,还有一个较为简便的方法,也就是沿着*号划一条线:
个人对指针和数组的深刻理解,解析数组和指针的区别等等
经典指针和数组教程 ָ,二维数组的使用,指针的使用
ch8-指针和数组.pptx
指针数组和数组指针。 int* intPtrArray[5]; // 创建一个包含 5 个整数指针的指针数组 int a = 10, b = 20, c = 30, d = 40, e = 50; intPtrArray[0] = &a; // 第一个元素指向整数变量 a intPtrArray[1] = &b; // ...
实验与指导-数组指针字符串 指针与数组区别
附录一 再论指针和数组.pdf
论C语言中指针和数组关系.pdf
数组,指针.对于刚刚接触程序的童鞋们来说,是一个难点,也是一个重点.为了提高大家这方面的水平.这里提供一份资料.
探讨C语言中的指针和数组问题.pdf
利用指针和数组实现两个集合的并交操作
C语言程序设计课件第11章指针和数组.ppt
C程序语言课件:第11章 指针和数组.ppt