可以,但int *p;*p=7;這樣不行。
10年積累的做網站、成都做網站經驗,可以快速應對客戶對網站的新想法和需求。提供各種問題對應的解決方案。讓選擇我們的客戶得到更好、更有力的網絡服務。我雖然不認識你,你也不認識我。但先做網站后付款的網站建設流程,更有潮安免費網站建設讓你可以放心的選擇與我們合作。
因為“能直接給指針指向的數據”賦值,而這里的p還沒有指向,所以不能賦值,這種指針有個名字叫“懸浮指針”,是不能給它賦值的。
這樣才可以:
int a,*p=a;*p=7;
實際上就是使a等于了7。
擴展資料:
注意事項
也可以使用賦值運算符為指針變量賦值,但要保證兩個指針變量的類型相同。
假設有如下變量定義:
int i,j,*p,*q;p=i;q=j;
這兩句將變量i和j的地址分別賦值給指針變量p和q;
執行了q=p后,執行該條語句,指針變量p和q都指向了同一個變量i,因此指針變量p和q中存放的都是變量i的地址i。變量i此時并沒有初始化,只為其分配了內存單元。
注意理解:q=p;和*q=*p
前者為指針變量q賦值,即將指針變量p中存放的某個變量的地址賦值給q。顯然,賦值后,q和p就指向了同一個變量。
后者將p指向變量的賦值給q指向的變量。
例子:
p=i;
q=j;
i=2;
j=3;
你這樣想說明你還沒有真正理解內存和指針。int
a;表示編譯器隨機取出一個空閑的地址分配給a,不妨設為00000000,長度為sizeof(int),不同編譯器可能不同。int
*p;也表示隨機取出一個空閑的地址分配給p,不妨設為000000f0,長度一般為4個字節,則這四個字節現在存儲的內容是不確定的,假設為00000ff0,那么*p表示地址00000ff0上的值。*p=a則把地址00000ff0的值變為a的值,顯然如果該地址目前正在被某個進程使用,就有可能破壞該進程,因此這種方法是十分危險的。給指針賦值一般有兩種方法,一種是將已經存在的變量的地址傳遞給指針,格式為:p=a;另一種是首先為指針申請指向的合法內存,C語言中用函數malloc(),然后給已申請的地址賦值,如*p=6。
指針的賦值
int
*p;
int
a;
int
b[1];
p
=
a;
p
=
b;
指針的賦值,“=”的左操作數可以是*p,也可以是p。
當“=”的左操作數是*p時,改變的是p所指向的地址存放的數據;
當“=”的左操作數是p時,改變的是p所指向的地址。
數組的變量名b表示該數組的首地址,因此p=b;也是正確的.
同類型的指針賦值:
int
val1
=
18,val2
=
19;
int
*p1,*p2;
p1
=
val1;
p2
=
val2;
p1
=
p2;
//注意啦,p1指向了val2,而沒有指向val1
指針就是指向內存的某個地址的一個變量。
結構體指針就是這個指針變量的值必須指向存放該結構體的內存位置。
當這個指針沒有任何指向時,可以賦值為null值,但是改指針不可使用,程序中應該做判斷。下面是一些賦值演示。
struct student{
int id;
int score;
} aaa;
struct student *p = null;//結構體指針p初始化賦值為null
struct student *p2=aaa;//p2指向aaa
struct student *p3=(struct student *)malloc(sizeof(struct student));//內存中申請一個結構體空間,并將地址強制轉換為結構體指針變量賦值給p3
文章名稱:c語言中函數指針賦值,c語言中函數指針賦值是什么
網頁鏈接:http://m.kartarina.com/article18/hddjdp.html
成都網站建設公司_創新互聯,為您提供企業網站制作、品牌網站建設、動態網站、網站策劃、微信小程序、網站收錄
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯