重慶分公司,新征程啟航
為企業(yè)提供網(wǎng)站建設(shè)、域名注冊、服務(wù)器等服務(wù)
為企業(yè)提供網(wǎng)站建設(shè)、域名注冊、服務(wù)器等服務(wù)
可以,但int *p;*p=7;這樣不行。
10年積累的做網(wǎng)站、成都做網(wǎng)站經(jīng)驗(yàn),可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識你,你也不認(rèn)識我。但先做網(wǎng)站后付款的網(wǎng)站建設(shè)流程,更有潮安免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
因?yàn)椤澳苤苯咏o指針指向的數(shù)據(jù)”賦值,而這里的p還沒有指向,所以不能賦值,這種指針有個名字叫“懸浮指針”,是不能給它賦值的。
這樣才可以:
int a,*p=a;*p=7;
實(shí)際上就是使a等于了7。
擴(kuò)展資料:
注意事項
也可以使用賦值運(yùn)算符為指針變量賦值,但要保證兩個指針變量的類型相同。
假設(shè)有如下變量定義:
int i,j,*p,*q;p=i;q=j;
這兩句將變量i和j的地址分別賦值給指針變量p和q;
執(zhí)行了q=p后,執(zhí)行該條語句,指針變量p和q都指向了同一個變量i,因此指針變量p和q中存放的都是變量i的地址i。變量i此時并沒有初始化,只為其分配了內(nèi)存單元。
注意理解:q=p;和*q=*p
前者為指針變量q賦值,即將指針變量p中存放的某個變量的地址賦值給q。顯然,賦值后,q和p就指向了同一個變量。
后者將p指向變量的賦值給q指向的變量。
例子:
p=i;
q=j;
i=2;
j=3;
你這樣想說明你還沒有真正理解內(nèi)存和指針。int
a;表示編譯器隨機(jī)取出一個空閑的地址分配給a,不妨設(shè)為00000000,長度為sizeof(int),不同編譯器可能不同。int
*p;也表示隨機(jī)取出一個空閑的地址分配給p,不妨設(shè)為000000f0,長度一般為4個字節(jié),則這四個字節(jié)現(xiàn)在存儲的內(nèi)容是不確定的,假設(shè)為00000ff0,那么*p表示地址00000ff0上的值。*p=a則把地址00000ff0的值變?yōu)閍的值,顯然如果該地址目前正在被某個進(jìn)程使用,就有可能破壞該進(jìn)程,因此這種方法是十分危險的。給指針賦值一般有兩種方法,一種是將已經(jīng)存在的變量的地址傳遞給指針,格式為:p=a;另一種是首先為指針申請指向的合法內(nèi)存,C語言中用函數(shù)malloc(),然后給已申請的地址賦值,如*p=6。
指針的賦值
int
*p;
int
a;
int
b[1];
p
=
a;
p
=
b;
指針的賦值,“=”的左操作數(shù)可以是*p,也可以是p。
當(dāng)“=”的左操作數(shù)是*p時,改變的是p所指向的地址存放的數(shù)據(jù);
當(dāng)“=”的左操作數(shù)是p時,改變的是p所指向的地址。
數(shù)組的變量名b表示該數(shù)組的首地址,因此p=b;也是正確的.
同類型的指針賦值:
int
val1
=
18,val2
=
19;
int
*p1,*p2;
p1
=
val1;
p2
=
val2;
p1
=
p2;
//注意啦,p1指向了val2,而沒有指向val1
指針就是指向內(nèi)存的某個地址的一個變量。
結(jié)構(gòu)體指針就是這個指針變量的值必須指向存放該結(jié)構(gòu)體的內(nèi)存位置。
當(dāng)這個指針沒有任何指向時,可以賦值為null值,但是改指針不可使用,程序中應(yīng)該做判斷。下面是一些賦值演示。
struct student{
int id;
int score;
} aaa;
struct student *p = null;//結(jié)構(gòu)體指針p初始化賦值為null
struct student *p2=aaa;//p2指向aaa
struct student *p3=(struct student *)malloc(sizeof(struct student));//內(nèi)存中申請一個結(jié)構(gòu)體空間,并將地址強(qiáng)制轉(zhuǎn)換為結(jié)構(gòu)體指針變量賦值給p3