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