数组名与指针的区别
相同:
对数组名的操作相当于对指向数组首地址指针的操作,如下:
先建立一个数组a[5]
int a[5] = {1, 2, 3, 4, 5};
取数组第二个元素,可以有一下操作:
1. a[1]
2. 定义一个指针,通过指针取数组第二个元素
int *p;
p = a;
*(p + 1)
相异:
1. 指针是变量,数组名是常量
在上面的例子中,p可以做到p=p+1,但是a做不到a=a+1,编译器会报错。因为数组名是常量,常量不能作为左操作数即=左边的数。
2. 求本身长度不同
sizeof(a) / sizeof(int) 值为5,sizeof(p) / sizeof(int) 值为1。如果a是一个指针,那么
sizeof(a) / sizeof(int) 值应该为1,因为所有的指针长度都是固定的都是4个字节,所以a
不是一个指针,在编译器眼里a是一个变量,这个变量是int类型的数组,数组长度为5,
但是编译器又保留(放纵)它具有指针的功能。