1.一维数组名的值是一个指针常量,也就是第一个元素的地址,它的类型取决于数组元素的类型,数组元素是什么类型的,它就是指向什么类型的指针,并且这个指针是一个指针常量而不是指针变量
2.只有两种场合数组名不当指针常量来表示:一是当数组名作为sizeof操作符的操作数的时候,sizeof返回整个数组的长度而不是指向数组的指针的长度
二是当数组名作为单目操作符&的操作数的时候,取一个数组名的地址所产生的是一个指向数组的指针而不是指向某个指针常量的指针
3.除优先级外,下标引用和间接访问完全相同 array[value] 和*(array+(value))一样
4.指针和下标:下标绝对不会比指针更有效率。但指针有时会比下标更有效率
5.指针和数组的属性大相径庭。当申请一个数组的时候,它同时也分配了一些内训空间,用于容纳数组元素;但声明一个指针的时候,他只分配用于容纳指针本身的空间
6.当数组名作为函数参数传递时,实际传递给函数的是一个指向数组第一个元素的指针。数组形参既可以声明为数组有可以声明为指针,这两种声明形式只有当他们作为函数形参的时候才是相等的
7.数组初始化列表包含的值的个数少于数组元素的个数,数组最后几个元素就被缺省值初始化。如果多于数组元素个数,这个声明就是错误的
8.字符数组初始化可以用字符串常量的格式进行初始化,但他是一个初始化列表。并不表示一个字符串常量
9.多维数组是一维数组的特型,就是它的每一个元素本身也是数组,所以多维数组名就是一个指向数组的指针
10.注意下标:int mart[3][10];
以下各表示什么:mart[1][5] mart mart+1 *(mart+1) *(mart+1)+5 *( *(mart+1)+5) *(mart[1]+5)
11.指向数组的指针(本质上是指针,只是它是指向数组的指针):int mart[3][4], *mp=mart;这是不对的,因为mart是一个指向数组的指针,而mp是一个指向整型的指针,应该声明 int (*mp)[10];
12.作为参数的多维数组: 一位数组int vec[10]作为参数可以写成 int *vec 或者int vec[];而对于一个二维数组int mart[3][10]作为参数可以写成 int mart[][10]
或者int (*mart) [10]
13.指针数组(本质上是数组,只是是存放指针的数组): 例如 int *api[10];
本文详细介绍了C语言中数组和指针的关系,包括数组名作为指针常量的特性,数组在内存中的分配方式,指针和下标的使用效率,以及在函数参数传递中的行为。同时,讲解了多维数组的概念,初始化规则,以及数组和指针类型的正确声明和使用。
332

被折叠的 条评论
为什么被折叠?



