如何判斷指標指向的是陣列還是單個變數

時間 2021-08-30 09:32:05

1樓:匿名使用者

ls錯誤。陣列是陣列,本身不是指標;陣列退化為對應指標僅在傳遞函式引數等少數情形下成立——而且這些情況下,陣列本身不變,只是另外構造了乙個和指向陣列首元素的指標(這樣陣列和指標的值相等)而已。

指標無論是在編譯期還是在執行期都不包含指向的物件的型別資訊。對於sizeof,是在編譯期計算的,只有對於陣列名稱或&陣列名稱直接作用才能體現陣列左值語義而返回整個陣列的大小,對於指向陣列首位址的指標而言,和其它指標一樣仍然只返回指標本身的大小。

例如char a[10] = ;

char* p = a;

char* q = &a[2];

sizeof(a); /* 結果為10*/sizeof(&a); /* 結果為10*/sizeof(p); /* 結果在32位平台上為4*/sizeof(q); /*結果等於sizeof(p)*/所以,結論是無法通過指標本身判斷指向物件的型別以及所佔空間的大小。所以,老老實實另外儲存乙個標誌變數或者長度(0為非陣列)來判斷比較穩妥(如果是結構體變數,也可以用乙個成員作為標誌變數,不過比較浪費就是了)。

====

[原創回答團]

2樓:匿名使用者

沒辦法直接判斷,因為指標本身是不包含那些資訊的,它只描述乙個位址,sizeof()函式也只是能判斷字元陣列,也是根據字元陣列最後乙個符為null判斷的,如果不將最後乙個字元設為null也就沒有效果。sizeof()函式好像不能用於單個字元變數,如果沒猜錯。如果要判斷就只能另用變數作記錄了。

3樓:葉葉葉

陣列的sizeof值等於陣列所占用的記憶體位元組數,如:

char a1 = "abc";

int a2[3];

sizeof( a1 ); // 結果為4,字元 末尾還存在乙個null終止符

sizeof( a2 ); // 結果為3*4=12(依賴於int)

4樓:匿名使用者

這個是沒法直接判斷出來的,只有跟蹤**通過賦值時的語句來間接判斷。

怎樣區分陣列變數和指標變數?就是怎麼樣區分乙個變數可不可以使用sizeof語句?

5樓:匿名使用者

沒有陣列抄變數這一說法吧,lz你想問的是陣列名和指標的區別吧?

比如 char a[10] = "hello";

char *p = a;

這裡a是陣列名,p是指標變數。其實很好區分,只要看它的定義就行了啊。

對陣列名進行sizeof運算結果就是整個陣列占用位元組數,對指標進行sizeof運算的結果就是機器的字長(32位機器字長為4)。

有一種情況例外,就是當把陣列名作為函式形參時,在函式體內編譯器其實是將該陣列名當做指標的。例如:

#include

#include

int function(char a);//以陣列名為形參int main()

int function(char a)

最後的結果是

6 4 4

6樓:驀然回首之際

指標變數裡存的是指標,其他變數存的都是資料。

如何檢測指標指向陣列的大小?

7樓:匿名使用者

包含標頭檔案#include 然後在main函式中呼叫int t = _msize(ss);t就是整個陣列大小(int型是4個byte,所以輸出是40)t除以4就是陣列的容量

8樓:匿名使用者

int *a=new int(120);

申請乙個整型變數空間,賦初值為120,並定義乙個整型指標a指向該位址空間

int *a=new int[120];

申請120個整型變數空間,沒有賦初值,並定義乙個整型指標a指向該位址空間開始處

int *a=new int(n);

申請乙個整型變數空間,賦初值為n,並定義乙個整型指標a指向該位址空間 你的指標並沒有指向陣列,大小是無窮的,這時候去計算大小會造成陣列越界,最終返回值為4

如何判斷酸奶是發酵的,還是勾兌的

在超市買來盒裝或袋裝酸奶,然後將牛奶和買來的酸奶混合,用酸奶機等方法進行再次發酵製成酸奶,也就是所謂的 勾兌酸奶 還有很多人用買來的盒裝酸奶作為 引子 和牛奶混合再次發酵成酸奶,雖然有時會做成功,但專家指出這樣的做法十分不科學,致病的危險性極大,應堅決制止。首先,從超市買回來的酸奶已經存放了數天,其...

如何盡早準確判斷懷的是男孩還是女孩

如今測試胎兒性別的方法應用,並非鼓勵人們人為地去選擇女嬰或男嬰,而造成男女性別之間的不平衡,更主要的是從遺傳學的角度來考慮優生優育。因為有許多先天性的遺傳性疾病的發生是同性別有關的,尤其是與x 性染色體連鎖有關的遺傳性疾病 譬如先天性抗維生素d佝僂病患者,患者由於先天性腎小管對磷重吸收發生障礙,造成...

如何判斷鋼化玻璃是自爆的還是被擊碎的

焦淘 貝 如果鋼化玻璃是四周有玻璃膠固定的,自爆時它只有在自爆點會有一小塊濺落,其與的形成網狀,不會脫落,並且花紋從自爆點向四周擴散 如果是被擊碎的則會大面積脫落。如果鋼化玻璃是桌面,則不太好判斷,一般自爆的玻璃形成的顆粒較小,且大小比較均勻,擊碎的顆粒較大,且大小不一。如何鑑別鋼化玻璃的自爆? 消...