C語言中a和 a

2021-10-25 05:21:15 字數 1466 閱讀 2832

一.a

這裡我們先看看陣列名代表的是什麼,這個概念可能大家有所誤解,認為陣列名代表的就是陣列的位址,當然,陣列名代表的是乙個位址,但是關鍵是,通過這個位址,我們關注的是它能取得多大空間的資料的值。例如對於乙個char 型別的位址,我們能夠取得乙個位元組的值,對於乙個int型的位址,我們能夠取得4個位元組的值。好了,下面我來談談型別的理解。

1.c語言中的型別

char a ; *****> a是char型別

short b; *****> b 是short型別

int c; *****> c是int型別

char *p; *****> p是char *型別

short *p; *****>p是short *型別

int *c *****=> c是 int *型別

因此,我們可以得出乙個結論:把變數名去掉,剩下的就是型別。

因此,我們的陣列就可以說是乙個特殊的型別。以int型別的陣列為例,來說說我們

的a和&a.

例如:int a[4];

眾所周知,a是乙個位址。其實,a的本來的面目應該是a + 0,只不過,這個0我們常常

省略了,*(a + 0)表示什麼?,這個就是代表我們取得第乙個元素的資料,也就是a[0].

因此,我們可以理解為a代表了首元素的位址。也就是a[0]的位址。因此,我們得出了乙個

結論:陣列的陣列名,代表了陣列首元素的首位址。

int a[4]陣列中,a[0]的資料型別為int 型別,它的位址就應該用int *來儲存。

故a的型別應該用int *型別來儲存。

2.&a位址詳解

理解了a,我們再來理解&a的話,相對來說就比較容易了。剛剛說了,我們變數名去掉,剩下的就是我們的型別。還是以int 型別的陣列為例子來講解。

例如:char a; ====>&a表示的是我們的位址。&a +1一次移動乙個char型別的

大小short a; ====>&a表示的是我們的位址。&a +1一次移動乙個short型別

的大小int a; ===>&a表示的是我們的位址。&a +1一次移動乙個int型別的

大小同理:int a[4] ===>陣列的型別為int [4];&a表示的就是我們int [4]的,整個變數的位址。把

int [4]看成乙個整體,&a + 1一次移動懂得大小為整個陣列的大小,也就是20個字

節。&a可以理解成陣列真正的位址。

通過上面的分析,&a就好理解了,他就是變數a的位址,這個變數a的作用範圍是四個int空間的資料,也就是如果將&a賦給某個變數p,p的型別應該是:int (*)[4];也就是指向包含4個int資料的陣列的指標,這個叫做陣列指標。

再來看看a+1和&a+1的區別,a+1表示的是陣列第乙個元素位址,&a+1表示的是跨過a陣列的下乙個位址。如下圖

c 語言中的 和

我們使用 把巨集引數變為乙個字串,用 把兩個巨集引數貼合在一起.當巨集引數是另乙個巨集的時候,需要注意的是凡巨集定義裡有用 或 的地方巨集引數是不會再展開。下面舉兩個例項 define print f,v printf the v is f v 加上 不會替換引數,只替換其所對應的字元 int ma...

C語言中的「 」和「

先說左移,左移就是把乙個數的所有位都向左移動若干位,在c中用 運算子.例如 int i 1 i i 2 把i裡的值左移2位 也就是說,1的2進製是000.0001 這裡1前面0的個數和int的位數有關,32位機器,gcc裡有31個0 左移2位之後變成 000.0100,也就是10進製的4,所以說左移...

c語言中fscanf和fprintf

很多時候我們需要寫入資料到檔案中時都覺得很困擾,因為格式亂七八槽的,可讀性太差了,於是我們就想有沒有什麼函式可以格式化的從檔案中輸入和輸出呢,還真有。下面我將講解 一下fscanf和fprintf的強大之處。1 fscanf 可以從乙個檔案流中格式化讀出資料,遇到空格或回車就停止 原型 intfsc...