C++数组和指针

本文详细探讨了C++中数组和指针的关系。首先,数组名在使用时相当于指向首元素的指针,可以使用begin()和end()函数避免手动计算地址。其次,指针可以加上或减去整数,改变指向的位置。此外,两个指针相减得到它们之间的距离,但必须确保指针属于同一数组,并且结果是ptrdiff_t类型的带符号数。最后,指针和下标的互换使用也是C++中常见的操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Part one
在用到数组名的地方,便会将其转换为指向数组第一个元素的指针

char a[ ] = { };
auto p = a; //等价于 p = &a[0];

#include<iostream>
#include<string>
using namespace std;
void main() {
	char a[4] = {'a','b','a','d'};
	auto p = a;
	auto q = &a[4];   //p为指向数组a的未元素的下一个地址的指针;
	for (p; p != q; ++p)
		cout << *p<< endl;
	auto size_a = size(a);
	cout << size_a << endl;
	system("pause");
}

输出:
在这里插入图片描述
利用begin、end 函数避免手动确定数组起止地址指针可能会引发的错误;

#include<iostream>
#include<string>
using namespace std;
void main() {
	char a[4] = { 'a','b','a','d' };
	char *p = begin(a);
	char *q = end(a);   //p为指向数组a的未元素的下一个地址的指针;
	for (p; p != q; ++p)
		cout << *p << endl;
	system("pause");
}

**Part two
给指针加上或者减去一个整数值,其结果仍然是指针。**新指针指向的元素与原来的指针相比前进(加)或后退(减)了该整数值个位置;

    #include<iostream>
	using namespace std;
	void main() {
	char a[4] = { 'a','b','a','d' };
	char *p = a;
	char *q = p + 3;
	char *m = q - 2;
	char *n = q - 6;  //已超出数组范围
	cout << "p = " << *p << endl;
	cout << "q = " << *q << endl;
	cout << "m = " << *m << endl;
	cout << "n = " << *n << endl;  
	system("pause");
}

n为空。
在这里插入图片描述
Part three
两个指针相减,结果是他们之间的距离。
参与运算的两个指针必须指向同一个数组中的元素;
两个指针相减的结果是一种类型名为ptrdiff_t的标准库类型,因为两个指针相减差值可能为负,因此ptrdiff_t是一种带符号数。

#include<iostream>
using namespace std;
void main() {
	char a[4] = { 'a','b','a','d' };
	char *p = a;
	char *q = &a[3];
	auto len = q - p;   //不确定是啥类型,用auto就好
	auto length = p - q;;
	cout << "p = " << *p << endl;
	cout << "q = " << *q << endl;
	cout << "len = " << len << endl;
	cout << "length = " << length << endl;
	system("pause");
}

在这里插入图片描述
Part four
下标和指针

#include<iostream>
using namespace std;
void main() {
	char a[4] = { 'a','b','c','d' };
	char *p = a;	// p = &a[0];
	char *q = &a[2];
	char m = *(p + 2);  // m == a[2] == *q == 'c';
	char n = q[1];		// n == *(q+1) == a[3] == 'd';
	char t = q[-1];		// t == *(q-1) == a[1] == 'b';

	cout << "p = " << *p << endl;
	cout << "q = " << *q << endl;
	cout << "m = " << m << endl;
	cout << "n = " << n << endl;
	cout << "t = " << t << endl;
	system("pause");
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值