C++学习笔记34:用指针访问数组元素和指针数组

指针访问数组元素

指针的运算本身就是适合对连续的数据进行处理,而数组正好满足这一要求。所以这一节研究如何使用指针访问数组元素。
首先我们举个例子

int a[10],*p;//定义一个数组和一个指针变量p
p=a;//或者p=&a[0];这两句话的意思都是将数组a的首地址赋值给p
等效形式

*p就是a[0],是寻址运算符,就是找到p变量中保存的地址里面的内容,即数组a的第一个元素。
同理
(p+i)就是找到对应数组中的第i个元素a[i]。
与此同时 *(a+i)和p[i]也都代表相同的含义。
总结一下便是 *(指针+i) = *(数组名+i) = 数组名[i] = 指针变量名[i]
数组名a是数组的首地址,是一个常量,所以不能进行自加自减运算。

指针数组

数组的每个元素都是指针变量,这个数组就是指针数组。
语法形式

数据类型 *数组名[下标表达式];

下标表达式指出数组元素的个数,数据类型表示指针的类型,数组名是指针数组的名称也是数组的首地址。
例例用指针数组输出单位矩阵

#include<iostream>
using namespace std;
int main()
{
	int line1[] = { 1,0,0 };
	int line2[] = { 0,1,0 };
	int line3[] = { 0,0,1 };
	int* pline[3] = { line1,line2,line3 };
	for (int i = 0; i < 3; i++)
	{
		for (int j = 0; j < 3; j++)
			cout << pline[i][j] << " ";
		cout << endl;
	}
	return 0;
}

将三个一维数组的数组名作为指针数组的元素,完成了指针数组的初始化,每个元素分别指向矩阵的一行。
pline[i][j]并不是二维数组而是一维指针数组,前面的pline[i]是指针名,后面的[j]就是对应的元素。(具体看上面的等价方式)。在内存中的存储方式也是不相同的二维数组的元素在内存中是连续的一行接一行,而指针数组在内存中是每行的元素是连续的,但是行与行之间没有关系。
虽然二维数组和指针数组存在本质的差异,但是还是可以通过指针数组对二维数组进行访问。
例 二维数组举例

#include <iostream>
using namespace std;

int main() {
	int array2[3][3]= { { 11, 12, 13 }, { 21, 22, 23 }, { 31, 32, 33 } };
	for(int i = 0; i < 3; i++) {
		for(int j = 0; j < 3; j++)
			cout << *(*(array2 + i) + j) << " ";	//逐个输出二维数组第i行元素值
		cout << endl;
	}
	return 0;
}

通过数组元素的地址可以输出二维数组元素,使用*(*(arry2+i)+j)这就是arry2数组的第i行第j列元素,对应下标是arry2[i][j].

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值