1: 請問下面的代碼有什么問題?#include
#include
void p_malloc( void *p, int size)
{
p = malloc(size);
}
int main ( void )
{
char * p = NULL;
p_malloc(p,100);
//使用p
...
}
1:void *, void**,void **...:都是一種變量類型;
2:在調用函數(shù)時,被調用函數(shù)的形參是主調函數(shù)的調用該函數(shù)時形參列表的拷貝(簡單的賦值),且被調用函數(shù)的形參都是臨時變量,作用域在本函數(shù)。
fun(...) p_malloc(void *C, intD)
{ {
void *A=NULL;
int B = 100; ===>
p_malloc(A,B);
} }
C = NULL; D =5;
3:主調函數(shù)若想通過子函數(shù)操作一個變量A,須將A的地址傳遞給被調函數(shù),被調函數(shù)通過該變量的地址來操作該變量,否則無法操作。
void p_malloc( void **p, intsize)
{
*p = malloc(size);
}
int main ( void)
{
char * p = NULL;
p_malloc( (void**)&p,100);
//使用p
...
}
char *p; 在被調函數(shù)中需要通過p的地址(&p: char**)來操作p;
p_mallocr(p,5);只是將p的值賦給了被調函數(shù),被調用函數(shù)操作的是自己的臨時變量無法操作p;
總結:
1:實參與形參的作用域為各種所在的函數(shù);實參傳遞到形參,只是同類型變量進行一對一的數(shù)值拷貝。
2:相互獨立的函數(shù),擁有各自獨立的私有數(shù)據(jù);在本函數(shù)沒有退出前(它所擁有的私有數(shù)據(jù)有效),其他的函數(shù)只能通過地址(指針)才能寫本函數(shù)的私有數(shù)據(jù)空間。
char 變量的指針變量:char *
char*變量的指針變量:char * *
void*變量的指針變量:void **
|