《C和指针》第八章 数组

本文详细介绍了C语言中数组和指针的关系,包括数组名作为指针常量的特性,数组在内存中的分配方式,指针和下标的使用效率,以及在函数参数传递中的行为。同时,讲解了多维数组的概念,初始化规则,以及数组和指针类型的正确声明和使用。

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];





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值