c語言中關於聲明和左值右值問題

float  *f()  中,()的優先級高於*  所以真正的理解意義爲  float *(f());即返回值爲雙精度型的指針變量
 引入typedef  與  signal  舉個例子:
    void  (*signal(int, void(*)(int)))(int);
 簡化爲:
typedef void (*HANDLER)(int);
HANDLER signal (int , HANDLER);
 上述是關於函數聲明的問題,那麼對於變量也存在生命的問題。要理解變量聲明,初始化和賦值的問題。
    int a = 0int b;
    b=10;
 對於第一個來說這就是一個初始化,在內存中創建空間來保存a這個變量,並將a的值初始化爲0,防止一個隨機值。對於第二個來說就是一個聲明,聲明一個整形變量b。第三個就是一個賦值語句,將10這個至賦給變量b,這時候b當作左值來用,代表的是b變量的地址,也就是將10這個值放到b所對應的地址中去。
 那現在來說一說左值和右值到底意義是什麼。
 1>左值可以理解爲“=”左邊的變量或者常量,對於變量來說,當左值來用的話,代表的是變量在內存中的地址,也就是址屬性。
 2>右值可以理解爲“=”右邊的常量或者變量,對於常量來說就是他自身,對於變量來說就是變量中所存儲的內容,也就是值屬性
 比如寫一個簡單的交換函數
    void swap(int *a,int *b)
     {
        int temp = *a;
        *a = *b;
        *b = temp;
     }

對於這個變量來說,首先創建了一個臨時變量temp,並將*a的內容初始化給temp,那麼temp中保存的就是*a的內容,也就是a變量的地址,這時候*a就作爲一個右值。第二步,*a = *b;根據上面所說的,*a這裏就當作一個左值來使用,也就是*a的地址來保存*b的值,第三步也是同樣的道理,最終交換的是a和b的地址,從而改變a和b的值。

發佈了31 篇原創文章 · 獲贊 3 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章