指標與陣列的區別深度剖析

2021-05-27 09:29:21 字數 676 閱讀 4983

我們從乙個例子說起:

test1.c

char a[5] = ;

test2.c

#include

extern char *a;

int main()

在linux下用gcc編譯:

gcc -g test1.c test2.c -o test

執行結果如下:[root@localhost cprofessor]# ./test

the a[0]'s address is : 64636261

segmentation fault

這裡出現了記憶體越界的提示。

為什麼會出現這種原因呢,是因為編譯器對陣列和指標處理不同。

對於陣列

char a[5] = ;

我們用a[3]來說明

但是對於指標來說:

char *p

第三步:根據p的值來定址得到運算元。

所以當你把陣列引用成指標,那麼編譯器就會把陣列當成指標處理p[i],從而第二步本來應該得到運算元,結果卻當成了位址。乙個字元被當成位址,基本可以斷定越界了。。。

這個bug本來編譯器應該給出的,但是gcc沒有對此問題作出反應,應該算gcc的乙個bug,如果誰的程式寫成這個,並且僥倖通過執行,那麼這就是乙個漏洞,嘿嘿~

嘿嘿,又學到一招,與大家分享,希望能幫助到大家。

深度剖析指標和陣列

什麼是指標?什麼是陣列?在電腦科學中,指標是程式語言中的乙個物件,利用位址,它的值直接指向存在電腦儲存器中另乙個地方的值。由於通過位址能找到所需變數單元,可以說,位址指向該變數單元。因此,將位址形象化的稱為指標。意思是通過它能找到以他為位址的記憶體單元。而陣列是乙個有限空間,他與指標是兩碼事,有時候...

指標的深度剖析

在c語言中,指標 pointer 是程式語言中的乙個物件,利用位址,它的值直接指向存在電腦儲存器中另乙個地方的值。由於通過位址能找到所需的變數單元,可以說,位址指向該變數單元。因此,將位址形象化的稱為 指標 意思是通過它能找到以它為位址的記憶體單元。指標變數和指標 將乙個變數的位址稱為變數的指標,存...

深度剖析 函式指標

宣告 下面 所有在windows7 vs2010環境下編譯通過。並執行無誤。是指向函式的指標變數,在c編譯時。每個函式都有乙個入口位址。那麼這個指向這個函式的函式指標便指向這個位址。函式指標的用途是非常大的,主要有兩個作用 用作呼叫函式和做函式的引數。資料型別標誌符 指標變數名 形參列表 一般函式的...