C語(yǔ)言數(shù)組從創(chuàng)建到內(nèi)存存儲(chǔ)的示例詳解
數(shù)組基礎(chǔ)概念
數(shù)組是存儲(chǔ)固定數(shù)量同類型元素的數(shù)據(jù)結(jié)構(gòu),內(nèi)存中連續(xù)存儲(chǔ),通過下標(biāo)(從0開始)快速訪問。
聲明與初始化示例
int arr[5]; // 聲明未初始化
int nums[3] = {1, 2, 3}; // 完全初始化
char str[] = "hello"; // 自動(dòng)推導(dǎo)長(zhǎng)度(包含'\0')一維數(shù)組操作
遍歷與輸入輸出
for (int i = 0; i < 5; i++) {
scanf("%d", &arr[i]); // 輸入
printf("%d ", arr[i]); // 輸出
}內(nèi)存連續(xù)性驗(yàn)證
printf("%p\n", &arr[0]); // 輸出相鄰地址差為sizeof(int)
printf("%p\n", &arr[1]); // 如4字節(jié)(int類型)
二維數(shù)組
聲明與遍歷
int matrix[2][3] = {{1, 2, 3}, {4, 5, 6}};
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++) {
printf("%d ", matrix[i][j]);
}
}內(nèi)存布局
二維數(shù)組按行優(yōu)先連續(xù)存儲(chǔ),matrix[0][2]與matrix[1][0]地址相鄰。
實(shí)用技巧
計(jì)算數(shù)組長(zhǎng)度
int size = sizeof(arr) / sizeof(arr[0]); // 適用于一維數(shù)組
二分查找實(shí)現(xiàn)
int binary_search(int arr[], int n, int target) {
int left = 0, right = n - 1;
while (left <= right) {
int mid = left + (right - left) / 2; // 防溢出
if (arr[mid] == target) return mid;
else if (arr[mid] < target) left = mid + 1;
else right = mid - 1;
}
return -1;
}常見錯(cuò)誤
- 下標(biāo)越界:訪問
arr[5](聲明為arr[5]時(shí)合法下標(biāo)為0-4)。 - 未初始化:直接讀取
int arr[10];的值是未定義的。 - 變長(zhǎng)數(shù)組限制:VLA(如
int arr[n])不可初始化且部分編譯器不支持。
應(yīng)用場(chǎng)景
- 字符串處理:字符數(shù)組存儲(chǔ)文本,注意結(jié)尾
'\0'。 - 數(shù)據(jù)批量處理:如傳感器數(shù)據(jù)、游戲坐標(biāo)等。
- 算法優(yōu)化:利用連續(xù)存儲(chǔ)特性提升訪問效率(如緩存命中)。
通過理解內(nèi)存布局和下標(biāo)機(jī)制,可高效操作數(shù)組并避免常見錯(cuò)誤。
到此這篇關(guān)于C語(yǔ)言數(shù)組詳解:從創(chuàng)建到內(nèi)存存儲(chǔ)的文章就介紹到這了,更多相關(guān)C語(yǔ)言數(shù)組內(nèi)存存儲(chǔ)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用C語(yǔ)言實(shí)現(xiàn)動(dòng)態(tài)數(shù)組Vector
這篇文章主要為大家詳細(xì)介紹了使用C語(yǔ)言實(shí)現(xiàn)動(dòng)態(tài)數(shù)組Vector的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-01-01
string,CString,char*之間的轉(zhuǎn)化
下面是MFC/C++/C中字符類型CString, int, string, char*之間的轉(zhuǎn)換的說明與舉例,經(jīng)常用的東西,相信對(duì)于用C/C++的朋友,還是比較有用的2013-03-03
關(guān)于VS+QT5應(yīng)用程序換圖標(biāo)的解決方案
這篇文章主要介紹了VS+QT5應(yīng)用程序換圖標(biāo)的處理方案,本文給大家提供了兩種解決方案供大家參考,每種方法給大家講解的都非常詳細(xì),需要的朋友可以參考下2021-12-12
C語(yǔ)言鏈表實(shí)現(xiàn)學(xué)生管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言鏈表實(shí)現(xiàn)學(xué)生管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-06-06
C++訪問std::variant類型數(shù)據(jù)的幾種方式小結(jié)
std::variant是?C++17中引入的一個(gè)新的類模板,提供了一種存儲(chǔ)不同類型的值的方式,本文主要介紹了C++訪問std::variant類型數(shù)據(jù)的幾種方式小結(jié),具有一定的參考價(jià)值,感興趣的可以了解一下2024-02-02
C++中幾種將整數(shù)轉(zhuǎn)換成二進(jìn)制輸出的方法總結(jié)
下面小編就為大家?guī)硪黄狢++中幾種將整數(shù)轉(zhuǎn)換成二進(jìn)制輸出的方法總結(jié)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-09-09

