程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> c-【關於C語言線性表參數的問題】

c-【關於C語言線性表參數的問題】

編輯:編程綜合問答
【關於C語言線性表參數的問題】

請問,*p,&p,* &p,這三個的區別是什麼?

為什麼我在開辟空間時,參數設置成*p,後面的插入等操作就無法實現,而換成 * &p之後,就可以實現了

最佳回答:


你所指的就是常見的編程錯誤之一,返回指向棧內存的指針。
void fun( int *p )
{
p = (int *)malloc(sizeof(int));
}
int main(void)
{
int *ps;
fun(ps);
printf("heap set\n");//可以執行到此
*p = 5;//Segmentation fault 發生段錯誤
free(ps);
return 0;
}

fun 函數的參數在棧中,當fun函數結束的時候,fun所持有的棧內存就會消失。p也會消失。在上例中,你實際上傳人的是一個指針值,就和其他類型一樣
,指針也有值,只不過指針的值是一個地址而已,所以你fun(ps)的時候,只是把ps的值(一個地址)copy到p,實際上,ps和p就不在同一個
地方,當fun返回後,p消失了,你也就不知道它所申請的內存在哪裡了,所以程序可以執行到printf,再往下執行,*p發生段段錯誤,因為你想要給
未知的內存區域賦值。
Int *p,這是聲明p是指針變量,
*p 這樣是要引用p所指向的內存,例如上例中*p = 4;
&p 就是取得指針本身的地址,不是指針指向的地址。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved