C++编程学习(第27天)

数组和指针

指向数组元素的指针

一个变量有地址,一个数组包含若干元素,每个数组元素都在内存中占用内存单元,它们都有相应的地址。指针变量既然可以指向变量,当然也可以指向数组元素,所谓数组元素的指针就是数组元素的地址。

int a[10];	//定义一个整型数组
int *p;		//定义一个基类型为整型的指针变量
p=&a[0];	//将元素a[0]的地址赋给指针变量p,使p指向a[0]

在C和C++中,数组名代表数组中第一个元素的地址,因此下面两个语句是等价的。

p=&a[0];
p=a;

需要注意的是,数组名a不代表整个数组。

可以通过指针引用数组元素,如果指针变量p已指向数组中的一个元素,则p+1指向同一数组中的下一个元素。

引用一个数组元素,可以用以下方法

1、下标法,如a[i]形式。

2、指针法,如*(a+i)或*(p+i)。其中a是数组名,p是指向数组元素的指针变量,如果已使p的值为a,则*(p+i)就是a[i]。

例1:输出数组中的全部元素。

1、下标法

#include <iostream>
using namespace std;

int main()
{
	int a[5];
	cout << "请输入5个整数:";
	for (int i = 0; i < 5; i++)
		cin >> a[i];
	cout << endl;
	cout << "输出数组a的数据:";
	for (int i = 0; i < 5; i++)
		cout << a[i] << " ";
	cout << endl;
	return 0;
}

2、指针法

#include <iostream>
using namespace std;

int main()
{
	int a[5];
	cout << "请输入5个整数:";
	for (int i = 0; i < 5; i++)
		cin >> *(a + i);
	cout << endl;
	cout << "输出数组a的数据:";
	for (int i = 0; i < 5; i++)
		cout << *(a + i) << " ";
	cout << endl;
	return 0;
}

3、用指针变量指向数组元素

#include <iostream>
using namespace std;

int main()
{
	int a[5];
	int i, * p = a;
	cout << "请输入5个整数:";
	for (i = 0; i < 5; i++)
		cin >> *(p + i);
	cout << "输出数组a的数据:";
	for (p = a; p < (a + 5); p++)
		cout << *p << " ";
	return 0;
}

以上输出结果如下:

在用指针变量指向数组元素时要注意,指针变量p是被定义为指向整型的对象,它可以指向整型的数组元素,也可以指向数组以后的内心单元,在使用指针变量指向数组元素是,应切实保证指向数组中有效的元素。

用指针变量作函数形参接收数组地址

用数组名作函数参数,数组名代表数组首元素地址,传递的也是数组首元素地址。

用指针变量作函数形参,同样可以接收从实参传递来的数组首元素的地址。

例2:将5个整数按由小到大的顺序排列

#include <iostream>
using namespace std;

int main()
{
	void select_sort(int* p, int n);
	int i, a[5];
	cout << "请输入5个整数:";
	for (i = 0; i < 5; i++)
		cin >> a[i];
	select_sort(a, 5);
	cout << "排序后数据为:";
	for (i = 0; i < 5; i++)
		cout << a[i]<<" ";
	return 0;
}

void select_sort(int* p, int n)
{
	int i, j, k, t;
	for (i = 0; i < n-1; i++)
	{
		k = i;
		for (j = i+1; j < n; j++)
			if (*(p + j) < *(p + k)) k = j;
		t = *(p + k);
		*(p + k) = *(p + i);
		*(p + i) = t;
	}
}

结果如下:

C++编译系统将形参数组名一律作为指针变量来处理。

在函数调用时并不存在一个占有存储空间的形参数组,只有指针变量。

需要注意的是,实参数组名a代表一个固定的地址,或者说是指针型常量,不能改变a的值。而形参数组名是指针变量,并不是一个固定的地址值,它的值是可以改变的。

用指针变量可以指向一维数组中的元素,也可以指向多维数组中的元素,但在概念上和使用上,多维数组的指针比一维数组的指针要复杂一些。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

武当豆豆

为国家GDP快速增长做贡献

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

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

打赏作者

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

抵扣说明:

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

余额充值