1. 程式人生 > >C語言指標作為形參的一些問題

C語言指標作為形參的一些問題

指標作為形參肯定有很多都不清楚其中具體的原理,我也是最近摸清了些門道:

下面就用一些例子來給大家說明:

void myMalloc(char *s) //我想在函式中分配記憶體,再返回 
{ 
    s=(char *) malloc(100); 
} 
void main() 
{ 
    char *p=NULL; 
    myMalloc(p); //這裡的p實際還是NULL,沒有能分配到100位元組空間,為什麼? 
    if(p) 
       free(p);
} 

基於上面的問題: 因為指標作為形參傳遞過去的是它的拷貝,只是說他們指向同一塊記憶體地址。

    上面其實是給他的拷貝體進行了記憶體地址分配

void myMalloc(char **s) 
{ 
    *s=(char *) malloc(100); 
} 
void main() 
{ 
    char *p=NULL; 
    myMalloc(&p); //這裡的p可以得到正確的值了 
    if(p) free(p); 
} 

這裡為什麼能得到正確的值了呢? 

因為這裡形參分配的記憶體其實是給s本身在分配了 ,上面分配的時候用的是(*s)

#include<stdio.h> 
void fun(int *p) 
{ 
    int b=100; 
    p=&b; 
} 
main() 
{ 
    int a=10; 
    int *q; 
    q=&a; 
    printf("%d/n",*q); 
    fun(q); 
    printf("%d/n",*q); 
    return 0; 
} 
這裡列印的結果為: 10  10

為什麼呢? 因為main函式中q指標作為形參傳遞給了fun函式,fun函式中p為q指標的拷貝體,f

fun函式中的p在函式體中重新指向了整數b的地址。所以q指標本身的值是沒有發生變化的

#include<stdio.h> 
void fun(int *p) 
{ 
    *p=100; 
} 
main() 
{ 
    int a=10; 
    int *q; 
    q=&a; 
    printf("%d/n",*q); 
    fun(q); 
    printf("%d/n",*q); 
    return 0; 
} 

這裡列印的結果是: 10  100

這裡可以正確列印我們想要的結果了,因為main函式中的q指標和形參中的p指標都指向了整數a的地址。

fun函式中其實是修改整數a地址中的值,所以在後文中列印指標q中的內容時,也能打印出100了