欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

c++ 一维数组与指针

程序员文章站 2022-07-07 11:37:40
...

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

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

//

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

例1:

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


例1输出:

c++ 一维数组与指针

//

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):

c++ 一维数组与指针

另外,从例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输出:

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

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

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