最近学习c++,今天老师讲完了指针这一章,说一维数组名实质上是个指针常量,函数中传数组参数过去实际上都是传的地址。一维数组倒好理解,但是二维数组让我感到有些懵逼,求大神指点。
下面是我写的一个练习二维数组的程序:
#include<iostream>
#include<typeinfo>
using namespace std;
/*二维数组*/
void printArray(int arr[][4], int, int);
int main()
{
int arr[4][4]=
{
{12,25,12,4},
{32,51,12,4},
{21,2,55,23},
{12,25,32,25}
};
printArray(arr, 4, 4);
return 0;
}
void printArray(int arr[][4], int line, int row)
{
cout << typeid(arr).name()<<endl;
cout << "arr[0][0]\t" << arr[0][0]<<endl;
cout << "&arr\t" << &arr <<endl;
cout << "arr\t" << arr << endl;
cout << "*arr\t" << *arr << endl;
cout << "**arr\t" << **arr << endl;
for (int i = 0; i < line; i++)
{
cout << "第" << (i + 1) << "行:";
for (int j = 0; j < row; j++)
{
cout << arr[i][j] << (j == (row - 1) ? "" : ",");
}
cout << endl;
}
}
图中为控制台输出的数据。
输出的arr值是一个地址,并且可用*进行间访操作,表明arr是一个指针。而*arr仍然为一个地址,且可以用*进行间访操作,表明*arr也是一个指针。那么arr就应该是个二级指针,但意外的是,arr的值和*arr的值一样,都是数组首元素的地址。我想知道这是为什么?
输出中第一行为arr的数据类型(是个指针数组吗?)
下面是我写的一个练习二维数组的程序:
#include<iostream>
#include<typeinfo>
using namespace std;
/*二维数组*/
void printArray(int arr[][4], int, int);
int main()
{
int arr[4][4]=
{
{12,25,12,4},
{32,51,12,4},
{21,2,55,23},
{12,25,32,25}
};
printArray(arr, 4, 4);
return 0;
}
void printArray(int arr[][4], int line, int row)
{
cout << typeid(arr).name()<<endl;
cout << "arr[0][0]\t" << arr[0][0]<<endl;
cout << "&arr\t" << &arr <<endl;
cout << "arr\t" << arr << endl;
cout << "*arr\t" << *arr << endl;
cout << "**arr\t" << **arr << endl;
for (int i = 0; i < line; i++)
{
cout << "第" << (i + 1) << "行:";
for (int j = 0; j < row; j++)
{
cout << arr[i][j] << (j == (row - 1) ? "" : ",");
}
cout << endl;
}
}
图中为控制台输出的数据。
输出的arr值是一个地址,并且可用*进行间访操作,表明arr是一个指针。而*arr仍然为一个地址,且可以用*进行间访操作,表明*arr也是一个指针。那么arr就应该是个二级指针,但意外的是,arr的值和*arr的值一样,都是数组首元素的地址。我想知道这是为什么?
输出中第一行为arr的数据类型(是个指针数组吗?)