位置:首頁 > 軟件操作教程 > 編程開發(fā) > C語言 > 問題詳情

C語言 指針運(yùn)算符與取地址運(yùn)算符

提問人:劉團(tuán)圓發(fā)布時(shí)間:2020-12-01

與指針相關(guān)的運(yùn)算符有兩個(gè):

(1)取地址運(yùn)算符“&”:該運(yùn)算符的功能是取出一個(gè)變量的地址。例如,使用scanf()函數(shù)輸入變量的值:

    scanf ("%d",&x);

(2)指針運(yùn)算符:也可以叫做間址運(yùn)算符或指向運(yùn)算符。使用形式為: 

    *指針變量

例如:

main()

{

    int a=10;

    int *p;

    p=&a;

    printf("%d",a);

    printf("%d",*p);

    主函數(shù)的第一條語句和第二條語句,分別定義了一個(gè)普通變量a和一個(gè)指針變量p。而第三條語句p=&a,將指針p指向變量a,也就是將a的地址存儲(chǔ)在指針p中。一旦指針p與變量a有了指向關(guān)系,就可以用來引用變量a的值,所以主函數(shù)的最后一句出現(xiàn)的*p就代表了變量a的值。

如果在程序中想對變量a用scanf()函數(shù)輸入數(shù)據(jù),可以使用:

    scanf("%d",&x);

假設(shè)變量a與指針p有了指向關(guān)系p=&a,scanf()函數(shù)也可以寫成如下形式:

    scanf("%d",p);

因?yàn)镻本身就代表了變量a的地址,所以可以將鍵盤輸入的值送入到a的地址中。但注意不要寫成如 下形式:

    scanf("%d",&p);

這種寫法意味著想輸入一個(gè)值送到指針p的地址中,而不是指針p所指向的變量的地址中,所以用法是錯(cuò)誤的。

如果理解了指針運(yùn)算符的含義,假設(shè)有定義: 

    int a=5, *p;

    *p=&a;

    則表達(dá)式a、*p、*&a是等價(jià)的。其中表達(dá)式“*&a”的含義是,先取變量a的地址,再用指針運(yùn)算符“*”取出該地址中存放的值,其實(shí)質(zhì)還是“a”。

    而表達(dá)式&a、p、&*p是等價(jià)的。對于表達(dá)式的操作順序?yàn)?,先?jì)算*p,*p其實(shí)就是a, 之后再取地址。所以本質(zhì)和&a是一樣的。

繼續(xù)查找其他問題的答案?

相關(guān)視頻回答
回復(fù)(0)
返回頂部