指標加一操作

2021-10-23 17:30:24 字數 836 閱讀 5905

c/c++裡面的陣列名字會退化為指bai針,所以陣列名a實際指的是du陣列的第乙個元素的zhi位址。而陣列名作dao為指標來講有特殊性,它正在它所指向的記憶體區域中,&a的值和a的數值是相同的(可以輸出觀察一下),但是型別和意義不同。而指標的加法操作和指向的資料型別密切相關。

比如:int a[10]; a就相當於int *,如果是對它加1(a + 1)是相當於a + 1 * sizeof(int)。但是&a的型別則相當於int **,是所謂指向陣列的指標,是陣列元素型別的二級指標,對它加1是相當於 &a + 1 * sizeof(a)的,所以會偏移乙個陣列長度。

int

main

(void);

int*ptr=

(int*)

(&a+1)

;printf

(「%d,

%d」,

*(a+1)

,*(ptr-1)

);return0;

}

此時的輸出是2,5。

解釋:(a+1)就是a[1],(ptr-1)就是a[4],執行結果是2,5。

&a+1不是首位址+1,系統會認為加乙個a陣列的偏移,是偏移了乙個陣列的大小(本例是5個int)

int *ptr=(int *)(&a+1),則ptr實際是&(a[5]),也就是a+5

&a是陣列指標,其型別為 int (*)[5],a是長度為5的int陣列指標,所以要加 5*sizeof(int),所以ptr實際是a[5];

但是prt與(&a+1)型別是不一樣的(這點很重要,prt指向的是整形),所以prt-1只會減去sizeof(int)

python實現加一操作

給定乙個由 整數 組成的 非空 陣列所表示的非負整數,在該數的基礎上加一。最高位數字存放在陣列的首位,陣列中每個元素只儲存單個數字。你可以假設除了整數 0 之外,這個整數不會以零開頭。示例 1 輸入 digits 1,2,3 輸出 1,2,4 解釋 輸入陣列表示數字 123。示例 2 輸入 digi...

指標 陣列 加常數

includeint main int ptr1 int a 1 int ptr2 int int a 1 printf x n x n a 0 a 1 printf x x ptr1 1 ptr2 return 0 結果 22fef8 22fefc 4 2000000 通常x86機器採用的小段儲存...

指標 1,怎麼加?

指標 1,是加乙個單元格還是加乙個位元組呢,先看乙個程式 include int main int p arr p p p 1 p 10 p p 20 printf d,d n arr 0 arr 1 return 0 這個程式通過編譯結果為 1 10,這個結果說明p 後,arr 1 的值被更換為1...