c语言中的数组名和指针有许多类似的地方,甚至大部分时候可以用数组名当做指针用。但是,他们是有区别的。
1.数组名的内涵
数组名的内涵在于其指代实体是一种数据结构,这种数据结构就是数组。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#include <stdio.h> int main(void) { char * p; char a[7]; p = a; printf("sizeof(a) = %d\n", sizeof(a)); printf("sizeof(p) = %d\n", sizeof(p)); return 0; } |
可以看到输出
为什么a的大小是7呢,因为这里a代表了一个数据结构,也就是这个数组。它由7个char类型的数据组成,因此大小为7.
2.数组名的外延
数组名的外延在于其可以转换为指向其指代实体的指针,而且是一个指针常量,不能被修改。他表示的是数组存储的首地址。
3.指向数组的指针
指向数组的指针是另外一种变量类型,仅仅意味着数组的存放地址。
4.数组做函数的形参
若声明一个函数
1 |
void test(char a[]); |
在编译器执行的时候,他被解释为void test(char *)
因此,如果传入数组名,到了函数里,他就是一个普通的指针。