今天,知道了一个好像醍醐灌顶的东西,大学四年真的学的太少啦。/
首先,已经知道C++中的函数参数传递方式有两种:按值传递和按引用传递。其中按引用传递分为,用引用参数和用指针参数传递。一个变量的引用参数和它指向同一地址,所以用引用参数按引用传递,传递的就是原来的参数,而并不是该参数值的拷贝,也是早就知道的。
那用指针参数传递按引用传递,之前的想法可能有错。
指针,假设
int val = 1;
int *valPtr = &val;
此时,valPtr表示它的内存里面存的是一个int类型的值的地址,即存val这个变量的地址,*valPtr指的是它存的地址里面存的值,就是val的值1,&valPtr就是存valPtr的内存地址。这也是之前明白的。
贴一段代码 来源点击打开链接,就是看了这个才发起疑问的。
void GetMemory(char* p)
{
p = (char*)malloc(100);
}
int main()
{
char* str = NULL;
GetMemory(str);
strcpy(str, "hello world");
printf(str);
return 0;
}
如果想要达到想要的效果,就应该改掉GetMemory(char* p),改成GetMemory(char* &p)。
那用指针参数的引用传递函数参数是什么鬼呢?就是,当我们传了一个指针(实际上是一个指针的拷贝),当我们用*p时,就能够改变*str,这样就做到的按引用传递,这是因为*p表示的所指内存的值,这和*str相同。
啦啦啦啦啦啦,还是蛮高兴的。