[問題] 關於指標、記憶體位址的問題
開發平台(Platform): (Ex: Win10, Linux, ...)
windows 8
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)
gcc
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
n/a
問題(Question):
最近在初學指標有一點小疑問,所以想做個實驗
我先設定了一個 int 的陣列
我知道 int 的預設空間是 4 bytes
陣列的開頭記憶體位址是 arr == 0028FEF8
所以每一個陣列的每一個元素就是
0028EFE8 開始遞增 4
所以是
0028FEF8
0028FEFC
0028FF00
0028FF04
0028FF08
我去取值的寫法是用 loop
i++ 遞增
arr + i
arr + 0 == arr[0] == 0028EFE8
arr + 1 == arr[1] == 0028EFEC
.
.
arr + 4 == arr[4] == 0028FF08
我想問的問題是
為什麼 arr + 1 不是 0028EFE8 + 1 == 0028EFE9 ??
不管我用 arr+1,或者 ptr + 1
他都會自動跳 4 bytes,自己去找到每個陣列元素的記憶體位址開頭
為什麼,我用 ptr + 1 不會取到 arr[0] 跟 arr[1] 之間的 0028EFE9 的這個位址 ??
請問有辦法可以取到
arr[0] 0028EFE8
arr[1] 0028EFEC
之間的三個記憶體位址
0028EFE9
0028EFEA
0028EFEB
這三個位址嗎??
餵入的資料(Input):
預期的正確結果(Expected Output):
輸出結果沒問題
只是想做個實驗,更加理解指標跟記憶體位址
address of arr[0] = 0028FEF8
address of arr[1] = 0028FEFC
address of arr[2] = 0028FF00
address of arr[3] = 0028FF04
address of arr[4] = 0028FF08
錯誤結果(Wrong Output):
n/a
程式碼(Code):(請善用置底文網頁, 記得排版)
#include <stdio.h>
#include <stdlib.h>
int main(){
int arr[] = {10,20,30,40,50};
int i=0;
int *ptr = &arr[0];
for( i ; i < 5 ; i++ ){
printf( "address of arr[%d] = %p\n" , i , arr+i );
printf( "address of arr[%d] = %p\n" , i , ptr );
ptr += 1;
}
}
補充說明(Supplement):
初學
在請各位前輩解惑了
謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.195.54.122
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1504447651.A.9B8.html
→
09/03 22:26, , 1F
09/03 22:26, 1F
→
09/03 22:30, , 2F
09/03 22:30, 2F
推
09/03 23:29, , 3F
09/03 23:29, 3F
哦!!! 原來 char pointer 也可以用在 別的型態的變數上哦
我以為不能混用,
看來用甚麼型態的 pointer 只有跟 pointer 在記憶體位址跳幾格有關係
而 pointer 跟要對應的變數型態沒有硬性規定,
果然應該多嘗試多問,又學到了。
謝謝大家提點
另外補問一點推文說的 1 byte pointer 應該就是指的就是 char *ptr 吧??
還是有別的 1 byte pointer ?
謝謝
※ 編輯: gowrite (123.195.54.122), 09/04/2017 00:43:00
推
09/04 00:54, , 4F
09/04 00:54, 4F
推
09/04 01:05, , 5F
09/04 01:05, 5F
→
09/04 01:06, , 6F
09/04 01:06, 6F
→
09/04 01:06, , 7F
09/04 01:06, 7F
→
09/04 01:07, , 8F
09/04 01:07, 8F
→
09/04 01:08, , 9F
09/04 01:08, 9F
推
09/04 01:50, , 10F
09/04 01:50, 10F
→
09/04 01:50, , 11F
09/04 01:50, 11F
※ 編輯: gowrite (123.195.54.122), 09/04/2017 03:14:50
推
09/04 04:02, , 12F
09/04 04:02, 12F
推
09/04 13:37, , 13F
09/04 13:37, 13F
→
09/04 13:37, , 14F
09/04 13:37, 14F
→
09/04 13:37, , 15F
09/04 13:37, 15F