原文:https://www.cnblogs.com/fenghuan/p/4775023.html
1.概述
(1)数组名的内涵在于数组名指代一种数据结构:数组
(2)数组名有时可以转换为指向该数组的指针常量
(3)数组名可能失去其数据结构内涵 ,数组名作为函数形参时,全面沦落为一个普通指针!
(4) 指向数组的指针则是另外一种变量类型,仅仅意味着数组的存放地址(数组的地址就是第一个元素的地址)!
2.数组名的内涵:数组
#include <iostream>
using namespace std;
int main()
{
char str[10];
char* pStr = str;
cout << "sizeof(str): \t" << sizeof(str) << endl;
cout << "sizeof(pStr): \t" << sizeof(pStr) << endl;
system("pause");
return 0;
}
说明:数组名str的内涵为一种数据结构,即一个长度为10的char型数组,所以sizeof(str)的结果为这个数据结构占据的内存大小:10字节。
3.数组名可转换为指针常量
数组名可以转换为指向其指代实体的指针,但它只能被看作一个指针常量,不能被修改。
#include<iostream>
using namespace std;
int main()
{
int arr_int[10];
for (int i = 0; i < 9; i++) { arr_int[i] = i; }
//数组名的可转换为指向其指代实体的指针(指针常量),即指向数组的指针
cout << "arr_int: " << arr_int << endl;
//取一个数组名的地址所产生的是一个指向数组的指针(相当于取数组存放的地址)
cout << "&arr_int: " << &arr_int << endl;
cout << "&(arr_int[0]): " << &(arr_int[0]) << endl;//证明数组的地址即为第一个元素的地址
cout << "&(arr_int[1]): " << &(arr_int[1]) << endl;
system("pause");
}
4.数组名作为函数形参时,相当于普通指针
#include <iostream>
using namespace std;
void arrayTest(char str[])//数组名做参数,不能改为char* str
{
cout << "sizeof(str):" << sizeof(str) << endl;
}
int main()
{
char str1[10] = "I love U.";
arrayTest(str1);
}