指標訪問陣列

2021-06-22 19:55:36 字數 1217 閱讀 3255

指標訪問陣列有幾下幾點不同:

1.通過指標變數,無法獲取到指標指向的內容的大小;

2.int *  是確定指標所要尋找的內容的大小,和指標的算數時所需要跳轉的位元組數量;

3.指標變數是變數可以通過自增方式訪問位址名,數字名不能自增。

指標是從高到低分配,卻從低到高儲存的。這個可以通過語句來表達:

int a = 3;

int b = 5;

int c = 8;

printf("%p\n", &a);

printf("%p\n", &b);

printf("%p\n", &c);

通過輸出我們可以看出a比b大4個位元組,說明a比b高,那麼如果把int b = 8; 改為int b = 0x78563412; 輸出的又變成什麼了呢。。其實指標就是乙個8位元組的記憶體,將16進製制的b放到記憶體當中輸出,就是12345678,儲存是低位開始,分配寫入時卻是從高到低,這樣就更加讓我們理解指標的定義了。

但是我們還需要注意一點,指標不能對long 進行間接定址,例**如下:

long x = a;

short *p3 = x;

printf("*p3 = %d\n", *p3);

這樣就是錯誤的,系統會提示  incompatible integer to pointer convwesion initializing 'short * with an expression of type 'long'; 錯誤的東西,一定要提醒自己忘記,每天早上打一遍**,告訴自己我要忘了它!!

請思考:你們知道字串是什麼嗎?誰能告訴我明確的答案?

其實,字串就是乙個一維陣列,char string = "iphone" 和 char string = ; 他們是一樣的,對嗎?我們知道字串「iphone」 是佔記憶體的,那麼你們知道string也是需要佔記憶體的。 

char *string1[] = 「iphone」; //字串陣列,儲存的是首位址,存的是'i' 的位址;

還有一點,一旦常量產生了,所有的位址都在這裡取,例:printf("%p\n", "iphone"); 不管我們寫多少遍這個**,「iphone」所存的位址都是同乙個,需要字串的時候都是從這裡取的,則指標*(string1 + 1) = 'x' 只能讀取,不能改變原有的數。

char *string[3] = ;  這個指標分配的是24個字元。可以用迴圈將他們的位址都輸出出來:

for (int i = 0; i < 3; i++)

指標與陣列 指標訪問與下標訪問

指標與陣列下標訪問與指標訪問的區別如下 1 以指標形式訪問指標 p 4 指標p的位址為0x00415754,加上4個字元的偏移量後的新位址為0x00415758,然後取出新位址中的內容0x65 e 2 以下標形式訪問指標 p 4 編譯器將下標形式的操作解析為以指標形式的操作。首先取出 指標p的位址0...

C語言使用指標訪問陣列

如果pa指向陣列中的某個元素,那麼pa 1將指向下乙個元素,pa i指向下i個元素。所以,若果pa指向a 0 那麼 pa其實就是a 0 pa 1 就是a 1 pa i 就是a i 根據這個思路,我們可以使用指標來訪問陣列。01 include 02intmain intargc,char argv ...

指標訪問二維陣列

之前對陣列的概念一直沒有理解透徹,只覺得陣列名就是個常量指標而已,用法和基本的指標差不多。所以當我嘗試用二級指標去訪問二維陣列時,就經常會出錯。下面就是剛開始寫的乙個錯誤的程式 include int main int parray null parray iarray printf array 0...