指针参数与数组参数的关系

来源:百度知道 编辑:UC知道 时间:2024/05/11 05:27:26
指针参数与数组参数是否有某种形式的关联?

C++/C程序中,指针和数组在不少地方可以相互替换着用,让人产生一种错觉,以为两者是等价的。
数组要么在静态存储区被创建(如全局数组),要么在栈上被创建。数组名对应着(而不是指向)一块内存,其地址与容量在生命期内保持不变,只有数组的内容可以改变。
指针可以随时指向任意类型的内存块,它的特征是“可变”,所以我们常用指针来操作动态内存。

当数组作为函数的参数进行传递时,该数组自动退化为同类型的指针。
所以:
char a[] = "hello world";
char *p = a;
cout<< sizeof(a) << endl; // 12字节
cout<< sizeof(p) << endl; // 4字节

void Func(char a[100])
{
cout<< sizeof(a) << endl; // 4字节而不是100字节
}

例:
p[]和*p是等同的。都是代表引用。其中p都是存放的是地址。只是在使用时有所不同。但是他们代表的意思是相同的,在形参和实参的使用时,二者是可以通用的。