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

C語言 指針運算符與取地址運算符

提問人:劉團圓發(fā)布時間:2020-12-01

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

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

    scanf ("%d",&x);

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

    *指針變量

例如:

main()

{

    int a=10;

    int *p;

    p=&a;

    printf("%d",a);

    printf("%d",*p);

    主函數(shù)的第一條語句和第二條語句,分別定義了一個普通變量a和一個指針變量p。而第三條語句p=&a,將指針p指向變量a,也就是將a的地址存儲在指針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);

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

    scanf("%d",&p);

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

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

    int a=5, *p;

    *p=&a;

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

    而表達式&a、p、&*p是等價的。對于表達式的操作順序為,先計算*p,*p其實就是a, 之后再取地址。所以本質(zhì)和&a是一樣的。

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

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