//初始化定義程式:
void
main
(void
)
//程式呼叫端
code[0]
=num%
10;
code[1]
=num/10%
10;
code[2]
=num/
100%
10;
code[3]
=num/
1000%10
; code[4]
=fre%
10;
code[5]
=fre/10%
10;
code[6]
=fre/
100%
10;
code[7]
=fre/
1000%10
;
執行平台:51微控制器+keil5原因分析:現象描述:使用buf可以訪問到code_1的陣列內容。
因為,分開連續定義兩個4個8位char型記憶體,但是型別一樣,於是cpu可以讀取連續陣列無誤。在記憶體層面,呼叫陣列記憶體是沒有陣列名字,buf[7]就是讀buf[0]位址偏移7位的位址,位址型別都一樣,所以寫入和讀取正常,沒有非法訪問現象。
另外乙個原因就是51的gcc編譯器檢錯能力比較有限。
int main (),
,};printf
("輸出結果為:%d\n"
, a[1]
[2])
;printf
("輸出結果為:%d\n"
, a[1]
[0])
;printf
("輸出結果為:%d\n"
, a[1]
[1])
;printf
("輸出結果為:%d\n"
, a[1]
[3])
;printf
("輸出結果為:%d\n"
, a[0]
[3])
;printf
("輸出結果為:%d\n"
, a[0]
[2])
;return0;
}
輸出結果都為0
int main ()}
,},}
;printf
("輸出結果為:%d\n"
, a[1]
[0][
0]);
printf
("輸出結果為:%d\n"
, a[5]
);return0;
}
#include
int main (),
},,}
};int(
*p)[2]
[3]= a3d;
printf
("輸出結果為:%d\n",*
(*(*
(p+1)+
1)+1
));return0;
}
輸出結果為:2
*(p+1) 代表當前a[0][0][0]
加到a[1][0][0]
*
int a[2]
[2][
3]=;
int*p =
&(a[0]
[0][
0]);
///* for(int i = 0; i < 2*2*3; i++)
*(p+i) = i; */
printf
("a的值為:%d\n",*
(p+(0*
3+0*
3+1)
));printf
("***************\n");
for(
int i =
0; i <2*
2*3; i++
)printf
("a的值為:%d\n",*
(p+i)
);
//編譯提示warning,錯誤寫法
int a[2]
[2][
3]=;
int*p = a;
printf
("a的值為:%d\n",*
(p+(0*
3+0*
3+1)
));printf
("***************\n");
for(
int i =
0; i <2*
2*3; i++
)printf
("a的值為:%d\n",*
(p+i)
);
C語言之陣列的使用
c語言中,陣列主要用來處理批量資料 查表 陣列的特點 1 陣列內資料有序排放 2 陣列中每個元素都屬於同一資料型別 這裡主要介紹一維陣列 二維陣列和字元陣列 字串處理函式 定義 初始化和引用陣列 定義 型別名 陣列名 常量表示式 如 int a 10 常量表示式 元素個數,陣列長度 下標從0開始 c...
通過陣列名訪問陣列元素的一些常見小計算
陣列名的含義有以下幾種情況 1.陣列名在如下情況表示整個陣列 1 在定義陣列的同乙個函式,求sizeof arr 2 在定義陣列的同乙個函式,arr 1 2.其他情況下陣列名表示陣列首元素的位址 我們先定義乙個一維陣列 int main 聚合型別 初始化一部分剩餘部分為0 printf x n ar...
C語言之對多維陣列的簡易理解
在平常學習的過程中,必定會經常跟陣列打交道並且也經常使用陣列,不管是一維陣列也好還是多維陣列也罷,陣列可以說是時常出現。相比較而言,對一維陣列來說,理解以及使用都是輕車熟路。但是相比一維陣列,多維陣列的使用以及理解卻有些偏差。在此,我對多維陣列進行了簡易的理解。首先以一維陣列為例。要畫出乙個一維陣列...