c++ 一维数组与指针

本文主要讲述c++中一维数组与指针的转换关系。在某些情况下,数组名会转化为指针。如有不当之处,请指正,谢谢!

(本文代码平台vs2013,以int类型说明,文中仅列出了关键的代码)。

//

1、当我们定义一个数组时,数组名代表的是一个数组,并非一个指针。

例1:

int a[5] = {0,1,2,3,4};
cout << sizeof(a) << endl;


例1输出:

//

2、当数组名传递给一个函数的形参、作为流输出时,数组名转换为指针。

例2:

void func1(int *p1)
{
	cout << "p1= " << p1 << " sizeof(p1) = " << sizeof(p1) << endl;
}
void func2(int p2[])
{
	cout << "p2 = " << p2 << " sizeof(p2) = " << sizeof(p2) << endl;
}
//------------------------------------------
	int b[5] = {0,1,2,3,4};
	cout << "b = " << b << " sizeof(b) = " << sizeof(b) << endl;
	func1(b);
	func2(b);

例2输出(32bits):

另外,从例2中可知,以int *p1和int p2[]形式为形参,p1、p2表示为指针。

//3、使用数组指针。

例3:

	int c[5] = { 0, 1, 2, 3, 4 };
	//使用数组名输出
	for (int i = 0; i < 5; ++i)
		cout << "c[" << i << "] = " << c[i] << " ";
	cout << endl;
	//使用指向数组的指针
	int(*pc)[5] = &c;	
	for (int i = 0; i < 5; ++i)
		cout << "(*pc)[" << i << "] = " << (*pc)[i] << " ";
	cout << endl;
	//int (*pc)[5] = c;//错误,不能直接使用数组名,但可以进行强制类型转换。
	int(*pc1)[5] = reinterpret_cast<int(*)[5]>(c);
	for (int i = 0; i < 5; ++i)
		cout << "(*pc1)[" << i << "] = " << (*pc1)[i] << " ";
	cout << endl;
例3输出:


从例3的输出可知,数组名代表的是数组。当定义一个指向数组的指针时,须使用取地址符,且在输出数组时,

须先解引用。另外,数组名可强制类型转换为数组指针(不建议这么用,此处仅演示用),然后通过解引用该

数组指针实现数组的访问。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值