Linux 下C语言 指针学习 二 (数组与指针)
很多人常常会认为指针与数组有着相当暧昧的关系,其实数组并不代表指针,数组的出现是为了把具有相同类型的若干变量按有序的形式组织起来。而指针的出生是为了通过指针去访问内存单元,这是文档上介绍的,读起来毫无瑕疵,因为太过官方,我所认知的数组其实就是在内存上申请一块固定大小的连续空间,注意是连续的空间哦,并且这块空间只能存放同一类型的数据,何为同一类型呢,比如说 int a[10]; 假设这句代码是在函数里的,所以会在栈中申请一块大小为sizeof(int)*10 的空间来存放int类型的数据,如果你不知道为什么会在栈里申请的话,我就在插一句话,如果知道就跳过这句话:c程序在运行时共有两个存储区,一个是静态存储区,另一个是动态存储区,在动态存储区里有一个栈和一个堆,函数就存储在栈上,在函数声明的变量也自然存储在栈中,不要问我为什么,这就是规定。
指针不管在什么情况,永远都是那么大的空间,(无符号整型的大小),而数组的大小要看声明的大小。声明多大,他就多大,标识符a即表示数组,他记录了这个数据的头指针。可以把这个头指针值赋给一个指针类型的变量,这样这个指针类型的变量就指向了这个数组的头位置;
对于字符数组数组而言,比如说char buf[10]="I AM WK“, 在这句话中,双引号里面的内容是放在静态存储区的,这句话实际上是把静态存储区的"I AM WK" 完全复制到自己的空间里,而 char *p="I AM WK“ 是把 静态存储区的"I AM WK" 的首地址 赋给p , 这个静态存储区的字符串是一个常量,是不可更改的,所以当你用 *p="ssss" 这样的复制语句的时候编译会不通过。