【C/C++】一篇文章教你区分数组指针&指针数组

1数组指针:

指向数组的指针,(可以理解为指向数组首元素地址的地址)本质是指针。

#include<iostream>
using namespace std;
//指针是基本数据变量类型,地址是数值,指针用来装地址
int main()
{
	int a[5] = { 12,25,32,4,1 };
	int *p = &a[0];//int型指针装数组中第1个元素12的地址
	int(*p1)[5] = &a;//数组指针,装数组a的地址,5是数组a的大小,
	//*p1可以理解为数组第一个元素地址的地址

	//int(*p1)[6] = &a; 【6】不可以!必须相等!!否则报错!!!
	
	//*p == a[0] == 12;
	//p==*p1 == a == &a[0];//p是这个数组 首元素的地址(首地址) 
	//  p+1指向第一个数组第二个元素
	
	//p1==&a;                p1是这整个数组的地址            
	//   p1+1指向第二个数组 
	//**p1==*p==a[0]=12;

	cout << p << endl << *p1 << endl << &a << endl;
	//第一个数组地址即这个数组首元素地址

	//cout << ++p1 endl;偏移后p1变化会影响后面输出

	cout << &a + 1 << endl << *p1 + 1 << endl; //偏移后不会影响后面输出

	cout << (*p1)[2]<<endl;
	//a是第一个数组,p1[2]是第三个数组  
	//*p1[2]是第三个数组的首元素
	cout << *(*p1 + 2) << endl;

	cout << p[2] << endl;
	cout << 2[p] << endl;
	cout << *(p + 2) << endl;
	cout << a[2] << endl;

	//p1是(数组)指针的名字
	//注意小括号使用,因为[]优先级高于*
	system("pause");
}
2指针数组:

存放指针的数组,(可以理解为一个数组里装了一堆地址)本质是数组。

//数组元素为指针的数组称之为指针数组。指针数组可以让每个数组元素指向不同的内存块,实现对不同大小的内存块的数据统一管理。
//程序:从键盘输入一组字符串使用指针数组对他们进行由小到大的排序并输出
#include<iostream>
using namespace std;
int main()
{
	int b = 3,
		c = 5,
		d = 1,
		e = 7,
		f = 2;

	int *a[5] = { &b,&c,&d,&e,&f};//指针数组a装5个元素的地址
	cout << d << endl;
	*a[2] = 9;//== d=9;改变d的值
	cout << d << endl;

	//指针数组拉链结构,不同于2维数组!!指针数组内的不同数组之间各元素不是连续的
	int q[2] = { 3,2 },
		w[3] = { 5,2,6 },
		h[2] = { 9,4 },
		r[5] = { 7,5,4,3,1 };
	*(r) = 9;
	int *t[4] = { &q[0],w,h,r };
	//t是(指针)数组的名字,4是该数组的大小
	//也可以用 int * (t[6])={ &q[0],w,h,r };即定义大一点的数组来装地址,没用到的空间不影响 
	cout << *(t[1]+0) << endl;//输出w[0]即5
	cout << t[1][0] << endl;
	

	
	char ch[5][20];
	char *pch[5];
	int i, j;
	for (i = 0; i <5; i++)
	{
		cin.getline(ch[i], 20);//键盘输入字符串,给字符数组赋值
		pch[i] = ch[i];//将个字符串的首地址传给指针数组各元素
		cout << &pch[i];
	}
	//排序
	
	system("pause");
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CP3圣保罗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值