浅谈数组

数组

数组具有一些和指针完全不同的特征。比如,数组具有确定数量的元素,而指针只是一个标量值。编译器会用数组名来记住这些属性。只有当数组名在表达式中使用时,编译器才会为他产生一个指针**常量。**请注意,是指针常量,而不是指针变量,说明这个数组名被当成指针使用的时候是不能修改这个指针的值的。所以,数组名的值是一个指针常量

只有两种情况下,数组名不用指针常量来表示—————
1)数组名作为sizeof操作符的操作数
2)数组名作为单目操作符&的操作数

关于字符串和字符数组

主要是指针和数组的区别

char *name = “Jerry”;
char name[] = “Jerry”;

前者用char的指针变量引用一个Jerry的地址,后者把Jerry初始化给char数组
前者不可以对字符串进行修改,即不存在name【0】这样的写法,后者可以修改字符串,可以对单个字符修改,比如name【0】 = ‘k’;

多维数组

多维数组可以不标明第一维的数量,但是必须标明第一维后面的数量。

多维数组,就是数组的数组。

二维数组的指针表示方法:

| 表示形式 | 含义|

表示形式含义
a二维数组名,指行,指向a[0]这一行的起始地址
a[0],*(a+0),*a指列,指向0行0列的元素地址
a+1,&a[1]指行,第1行的起始地址(行列数从0开始
a[1],*(a+1)指列,1行0列的地址,就是a[1][0]的地址
a[1]+2,*(a+1)+2,&a[1][2]指列,1行2列地址
*(a[1]+2), ((a+1)+2),a[1][2]指列,这是元素值

指向行的意思是,它+1加的是行数,从上往下加

指向列的意思是,它+1加的是列数,从左往右加

我们可以发现,在没有&符号的前提下,用下标法和带*号表示的,一定是一个指向列的,他们递增的时候增加的是列数。用数组名表示的,永远都是行数,比如:a+1,表示的是第(a+1)行的首元素地址,指向行, *(a+1)+2,虽然是指向列的,读作第(a+1)行第二列的元素地址, a+1的含义依旧是第(a+1)行。

可能会混肴的是:

&a[1] 和 &a[1][2]

前者一个下标表示第1行的元素地址,是指向行的

后者两个下标表示元素本身的地址

当把多维数组作为函数参数时

首先要区别的概念是

*p 这个叫一维指针,用于一维数组

(*p)【x】这个叫二维指针,指向行,x是一行的个数,用于二维数组,只能指向整个一维数组,不能指向单个元素,比如在一维数组中,用p=a就不行,一维数组的a是指列的,a+1指的是下一个元素,想要指向整个一维数组,就要+&,即p=&a

&号把指向列的转为行
*号把指向行的指向列

所以函数原型就有两种声明方法,一种是对应的数组形式,一种是上面的指针形式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值