1. 程式人生 > >C/C++ 為什麼在函式內部修改形參並不能真正地改變傳入形參的值?

C/C++ 為什麼在函式內部修改形參並不能真正地改變傳入形參的值?

一般有兩種傳遞方式:

1)值傳遞----包括(數值傳遞,指標傳遞) 

2)引用傳遞

你問題中的指標傳遞,其實就是值傳遞:(下面這個你能看懂麼)

void GetMemory( char p )
{
 p = ‘a’;
}
void Test( void )
{
 char str;
 GetMemory( str );
 pinrtf("%c",str);
}

---------------------------------------------

引入你的這個問題,你雖然將Test中的指標地址傳過去了,char *p確實也接受到了,但是:

p = (char*) malloc( 100 );這條語句中,malloc會返回一個新的地址,同時賦值給p,p已經不是原來的地址了。

void GetMemory( char*p )
{
 p = (char*) malloc( 100 );
}
void Test( void )
{
 char*str = NULL;
 GetMemory( str );
 strcpy( str, "hello world" );
 printf( str );
}

此時,p是指向一塊大小為100的空間。但是str還是指向NULL