C語言指標作為形參的一些問題
阿新 • • 發佈:2019-01-08
指標作為形參肯定有很多都不清楚其中具體的原理,我也是最近摸清了些門道:
下面就用一些例子來給大家說明:
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)
這裡列印的結果為: 10 10#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; }
為什麼呢? 因為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了