沒有長度的陣列

2021-04-07 01:01:08 字數 957 閱讀 1607

有人說c語言是乙個很詭異的語言,所以有時候我們會見到一些比較奇怪的定義,比如:

struct a;

這個看起來確實很奇怪,為什麼陣列沒有定義大小呢?

但實際上這段**不僅可以通過大部分編譯器,並且用途還很廣泛。我工作的時候就遇到了不少這樣的**,並且還是比較關鍵的**。

不過實際上事情並沒有那麼複雜和難以理解,不用看那些複雜的關於零長度陣列是否符合c標準,以及不完整型別等等沒見過的名詞,其實道理很簡單,c也不會專門為了這個而搞出來很複雜的規則。

讓我們來看看,什麼地方還會用到這樣類似的東東:

int f(int array)

int main(void)

int a[10];

f(a);

想想看,是不是一樣的道理?

int a無論怎麼用,都是乙個意思,就是說明a是乙個陣列,但是不知道它的大小。

當然在struct a的定義中,與這裡還是有些不同的,因為int data並沒有占用實際的空間,sizeof(struct a) = 2(或者是4,依賴於平台)。 

另外,int data[0]在有些編譯器上也可以通過,並且和int data具有相同的效果,所以上面的結構體宣告可能看起來象下面這樣:

struct a;

這種寫法不推薦使用,因為不符合c的標準,而且看起來更怪更難以理解。

引用別人的乙個例子,就可以更深入的理解了:

#include "stdio.h"

#include "stdlib.h"

struct a * pa = null;

struct b;

main()

;getch();

}注:例子**於http://www.etcell.com/soft/topicview.aspx?id=38200

,我是用baidu的cache看到的,看不到作者的名字,就不寫了,大家看到了幫忙告訴我,我寫上。另外,**修改了一句,以便突出重點。

關於c c 陣列沒有給陣列長度輸入的問題

最近敲的 題都是關於要把資料輸入陣列進行操作但是沒有陣列長度的問題,每次都要自己搜尋很多才能找到結果,於是決定自己來總結一下,希望能給廣大幫助。首先,先講兩個經常用的輸入。cin 和gets cin是任何都可以直接cin,但是cin遇到空格和回車都會停止。比如如果乙個字串要輸入到陣列中,如果字串是a...

求陣列的長度

在計算陣列所有元素之和等等問題時,經常需要知道某乙個陣列的長度,其求解公式如下 int data int size sizeof data sizeof data 0 size就是陣列data的長度。陣列作為實參和形參時,長度不同的原因 include stdafx.h int add int a,...

獲取陣列的長度

獲取陣列的長度 c語言中,定義陣列後可以用sizeof命令獲得陣列的長度 可容納元素個數 如 通過傳遞陣列名引數到子函式中,以獲得陣列長度是不可行的。如 intgetlength inta 因為,a是函式引數,到了本函式中,a只是乙個指標 位址,系統在本函式執行時,是不知道a所表示的位址有多大的資料...