一维数组与二维数组的访问方式

一维数组访问方式

一维数组中 a[i] 中的 a 代表了本数组的首地址,相当于 &a[0]。因此 *a 就等于 a[0]。那么对 a 加 1,就可以访问下一位:*(a+1) 就等于 a[1]。

访问一维数组首地址:a = &a[0];

访问一维数组的元素:a[i] = *(a+i);

输出一维数组:puts(a);        //a为字符串首地址

 

二维数组访问方式

假设有 a[2][2] 这样一个二维数组,可以这么理解它:a 由 a[0],a[1],a[2] 构成,而 a[0] 又由 a[0][0],a[0][1],a[0][2] 构成,a[1] 由 a[1][0],a[1][1],a[1][2] 构成,a[2] 由 a[2][0],a[2][1],a[2][2] 构成。

1.    a 由 a[0],a[1],a[2] 构成,而 a[0] 又由 a[0][1],a[0][1],a[0][2] 构成;

两个一维数组构成了一个二维数组。a 是一个二维数组,a[i] 是一个一维数组。既然 a[i] 是一个数组,那么数组名就是这个数组的首地址。比如,a[0] 就等同于 &a[0][0]。

2.    a 是一个数组名,它有三个元素:a[0],a[1],a[2];* a 等于 a[0],*(a + 1) 等于 a[1],*( a + 2 )等于 a[2];a[0], a[1], a[2] 又都是各个一维数组的首地址。比如 a[0] 就等同于 &a[0][0],就是说 *a[0] = a[0][0]。

再结合上面的 *a 等于 a[0],可以得出:**a 等于 a[0][0]。

以a[2][2]为例,则指针与数组的等价关系为:

 

3.  简单记之,二维数组 a[i][j] 中的 a[i] 是一个一维数组名,也就是一个地址量。

访问二维数组的各个字符串首地址:a[i] = &a[i][0] = *(a+i)

访问二维数组的各个元素:a[i][j] = *(a[i] + j) = *(*(a+i)+j)       

输出二维数组中的一个字符串:puts(a[i]);     //a[i]为字符串的首地址

 

访问字符串数组

通常对字符串的处理,传入的的参数都是字符串的首地址,也就是字符串名。

比如:

char s[80]; // 定义一个长度为 80 的字符串 s
char t[80]; // 定义一个长度为 80 的字符串 t
gets (s); // 读入一个字符串
puts (s); // 输出一个字符串
strcpy (s, t); // 将字符串 t 拷贝到 字符串 s 中

 其中的 s 都是该字符串的首地址

那相对于二维数组而言,

char *s[] = "I", "love", "you"};

//输出"love"
puts (s[1]);       //字符串形式 - s[1]是一个地址量,代表"love",为"love"字串的首地址
puts (*(s+1));   //指针形式

参考博客:

[1]  二维数组、指针数组、字符串二维数组   -  文之

  • 5
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值