C語(yǔ)言 從根本上理解數(shù)組
一、數(shù)組的概念
數(shù)組是相同類型的變量的有序集合

二、數(shù)組的大小
- 數(shù)組在一片連續(xù)的內(nèi)存空間中存儲(chǔ)元素
- 數(shù)組元素的個(gè)數(shù)可以顯示或隱式指定
下面看一段數(shù)組初始化的代碼:
#include <stdio.h>
int main()
{
int a[5] = {1, 2};
int b[] = {1, 2};
printf("a[2] = %d\n", a[2]);
printf("a[3] = %d\n", a[3]);
printf("a[4] = %d\n", a[4]);
printf("sizeof(a) = %d\n", sizeof(a));
printf("sizeof(b) = %d\n", sizeof(b));
printf("count for a: %d\n", sizeof(a)/sizeof(int));
printf("count for b: %d\n", sizeof(b)/sizeof(int));
return 0;
}下面為輸出結(jié)果:

注意數(shù)組長(zhǎng)度的計(jì)算,sizeof(數(shù)組名) / sizeof(數(shù)組元素類型)
三、數(shù)組地址與數(shù)組名
- 數(shù)組名代表數(shù)組首元素的地址
- 數(shù)組的地址需要用取地址符 & 才能得到
- 數(shù)組首元素的地址值與數(shù)組的地址值相同
- 數(shù)組首元素的地址與數(shù)組的地址是兩個(gè)不同的概念
下面看一段數(shù)組名和數(shù)組地址的代碼:
#include <stdio.h>
int main()
{
int a[5] = { 0 };
printf("a = %p\n", a);
printf("&a = %p\n", &a);
printf("&a[0] = %p\n", &a[0]);
return 0;
}下面為輸出結(jié)果:

注意:數(shù)組首元素的地址與數(shù)組的地址是兩個(gè)不同的概念,雖然它們的地址值是一樣的,但是意義確是完全不同的,不同之處在于它們所占用的內(nèi)存空間長(zhǎng)度是不一樣的。
四、數(shù)組名的盲點(diǎn)
數(shù)組名可以看做一個(gè)指針常量
數(shù)組名“指向”的是內(nèi)存中數(shù)組首元素的起始位置
數(shù)組名不包含數(shù)組的長(zhǎng)度信息
在表達(dá)式中數(shù)組名只能作為右值使用
只有在下列場(chǎng)合中數(shù)組名不能看做指針常量
- 數(shù)組名作為 sizeof 操作符的參數(shù)
- 數(shù)組名作為 & 運(yùn)算符的參數(shù)
下面通過一段代碼,說明數(shù)組和指針并不相同:
#include <stdio.h>
int main()
{
int a[5] = {0};
int b[2];
int* p = NULL;
p = a;
printf("a = %p\n", a);
printf("p = %p\n", p);
printf("&p = %p\n", &p);
printf("sizeof(a) = %d\n", sizeof(a));
printf("sizeof(p) = %d\n", sizeof(p));
printf("\n");
p = b;
printf("b = %p\n", b);
printf("p = %p\n", p);
printf("&p = %p\n", &p);
printf("sizeof(b) = %d\n", sizeof(b));
printf("sizeof(p) = %d\n", sizeof(p));
//b = a;
return 0;
}輸出結(jié)果如下:

sizeof(a) = 20,sizeof(p) = 4,這就說明了指針和數(shù)組是兩個(gè)不相同的東西。
五、小結(jié)
- 數(shù)組是一片連續(xù)的內(nèi)存空間
- 數(shù)組的地址和數(shù)組首元素的地址意義不同
- 數(shù)組名在大多數(shù)情況下被當(dāng)成指針常量處理
- 數(shù)組名其實(shí)并不是指針,不能將其等同于指針
到此這篇關(guān)于C語(yǔ)言 從根本上理解數(shù)組的文章就介紹到這了,更多相關(guān)C語(yǔ)言 數(shù)組內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
基于一致性hash算法 C++語(yǔ)言的實(shí)現(xiàn)詳解
在《基于一致性hash算法(consistent hashing)的使用詳解》一文中已經(jīng)介紹了一致性hash的基本原理,本文將會(huì)對(duì)其具體實(shí)現(xiàn)細(xì)節(jié)進(jìn)行描述,并用c++語(yǔ)言對(duì)一致性hash進(jìn)行了簡(jiǎn)單的實(shí)現(xiàn)2013-05-05
C語(yǔ)言基于EasyX庫(kù)實(shí)現(xiàn)有顏色彈跳小球
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言基于EasyX庫(kù)實(shí)現(xiàn)有顏色彈跳小球,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01
C++實(shí)現(xiàn)LeetCode(168.求Excel表列名稱)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(168.求Excel表列名稱),本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08
C++11中std::thread線程實(shí)現(xiàn)暫停(掛起)功能
本文主要介紹了C++11中std::thread線程實(shí)現(xiàn)暫停(掛起)功能,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04
C++深度優(yōu)先搜索的實(shí)現(xiàn)方法
這篇文章主要介紹了C++深度優(yōu)先搜索的實(shí)現(xiàn)方法,是數(shù)據(jù)結(jié)構(gòu)中非常重要的一種算法,需要的朋友可以參考下2014-08-08
OpenCV圖像旋轉(zhuǎn)Rotate的詳細(xì)介紹
這篇文章主要介紹了OpenCV圖像旋轉(zhuǎn)Rotate,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-05-05
C語(yǔ)言循環(huán)結(jié)構(gòu)深入刨析
C語(yǔ)言條件控制語(yǔ)句選擇結(jié)構(gòu),是屬于計(jì)算機(jī)的語(yǔ)言編輯,有在C語(yǔ)言條件控制中的語(yǔ)句選擇結(jié)構(gòu)的存在,即是C語(yǔ)言條件控制語(yǔ)句選擇結(jié)構(gòu),循環(huán)控制語(yǔ)句是一個(gè)基于C語(yǔ)言的編程語(yǔ)句,該語(yǔ)句主要有while循環(huán)語(yǔ)句、do-while循環(huán)語(yǔ)句和for循環(huán)語(yǔ)句來(lái)實(shí)現(xiàn)循環(huán)結(jié)構(gòu)2022-08-08
C語(yǔ)言深入細(xì)致講解動(dòng)態(tài)內(nèi)存管理
動(dòng)態(tài)內(nèi)存是相對(duì)靜態(tài)內(nèi)存而言的。所謂動(dòng)態(tài)和靜態(tài)就是指內(nèi)存的分配方式。動(dòng)態(tài)內(nèi)存是指在堆上分配的內(nèi)存,而靜態(tài)內(nèi)存是指在棧上分配的內(nèi)存,本文帶你深入探究C語(yǔ)言中動(dòng)態(tài)內(nèi)存的管理2022-05-05

