我有這個簡單的代碼:
#include<stdio.h>
#include<stdlib.h>
int main(){
int (*array)[2] = malloc(sizeof(int)*2);
printf("%p\n",array[0]); //0x13c606700
printf("%p\n",array[0] 1); //0x13c606704
printf("%p", array[1]); //0x13c606708
}
我正在使用 malloc 為 2 個元素的整數陣列分配記憶體。這將回傳該陣列的指標。不過,我不明白為什么array[0] 1和array[1]正在產生不同的地址。array[0] 1將地址列印在array[0] 4 處,這是預期的,因為整數的大小為 4 個位元組。但這對于array[1]. 為什么會這樣?直覺上是不是暗示在固定大小的陣列上使用 malloc 會使程式員能夠參考使用陣列符號(即陣列 [i])分配的記憶體?
uj5u.com熱心網友回復:
array[0]是一個int[2]。當傳遞給函式時,它會衰減為指向第一個元素 an 的指標int,它在您的系統上占4 個位元組。
array[0] 1將 加到sizeof(int)指標上。
array[1]是下一個int[2](越界)。那是sizeof(int)兩次。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/341544.html
上一篇:如何從此輸入格式中提取數字?
