C語(yǔ)言的數(shù)組與指針可以這樣了解
前言
自學(xué)筆記,沒(méi)有歷史知識(shí)鋪墊(省略百度部分)C語(yǔ)言數(shù)組的概念及使用
一、數(shù)組的定義
char a[n];
數(shù)組為常量,約定禁止二次賦值,即數(shù)組不應(yīng)該出現(xiàn)在=左側(cè),如:a="HelloWorld";數(shù)組在聲明時(shí),會(huì)申請(qǐng)一段連續(xù)的內(nèi)存空間,指針不會(huì)數(shù)組元素為變量,標(biāo)記可以修改指向任意內(nèi)存(實(shí)際上會(huì)copy右側(cè)變量/常量到左側(cè)數(shù)組元素變量中,產(chǎn)生兩份內(nèi)存,如a[2]="HelloWorld";),而指針指向常量后,再指向其他常量會(huì)產(chǎn)生段錯(cuò)誤異常
注意:數(shù)組與指針?lè)浅O嗨?br /> 二者的區(qū)別:二者相同點(diǎn):
C語(yǔ)言數(shù)組沒(méi)有越界問(wèn)題,甚至可以a[-3]寫(xiě)法,數(shù)組和指針都可以訪問(wèn)任意內(nèi)存地址的內(nèi)容
int main(int argc, char **argv)
{
char a4 = 'A';
char a[2] = {'B', 'C'};
char a3 = 'D';
//讀取結(jié)果:41 ASCII中 16位的41對(duì)應(yīng)字母A
printf("讀取結(jié)果:%X", a[2]);
return 0;
}
二、數(shù)組空間的初始化
1. char數(shù)組賦值
char buf[10]={'A','B'}; 等價(jià)于 char buf[]={'A','B'};,前者數(shù)組長(zhǎng)度為10,可在10范圍內(nèi)增減,后者數(shù)組長(zhǎng)度為聲明時(shí)數(shù)組當(dāng)前的長(zhǎng)度2,根據(jù)實(shí)際情況選擇,后續(xù)同原理
注意:上述賦值可以作為普通字符內(nèi)存使用,不能當(dāng)作字符串使用,如果當(dāng)作字符串,需要如下賦值
char buf[3]={'A','B','\0'};
char buf[3]={"ab"};
注意:上述賦值可以作為字符串使用,但不能作為普通字符內(nèi)存使用,默認(rèn)會(huì)多出\0
char buf[3]="ab";
注意:上述操作意義為:將右側(cè)的常量從常量區(qū)copy一份到左側(cè)的變量區(qū),該操作會(huì)產(chǎn)生兩個(gè)存儲(chǔ)"ab"內(nèi)存
右側(cè)"ab"是常量不可修改,左側(cè)buf變量的"ab"是可以修改的
2.char數(shù)組硬件開(kāi)發(fā)規(guī)范
char buf[10];表示存儲(chǔ)的字符/字符串(最后一位為\0)unsigned char buf[10];表示交互普通數(shù)據(jù)(最高位可以用于數(shù)據(jù)操作,粒度為bit)嵌入式開(kāi)發(fā)中禁止使用strcpy();函數(shù)(必須找到\0才會(huì)結(jié)束,有漏洞),copy可以使用strncpy();,內(nèi)存copy可以使用memcpy();
拷貝三要素
srcdest個(gè)數(shù)
注意:內(nèi)存copy
int main()
{
int buf[10];
int srcBuf[100]={1,2,3,4,5};
memcpy(buf,srcBuf,10*sizeof(int));
//buf[0]:1
printf("buf[0]:%d",buf[0]);
unsigned char bufChar[10];
unsigned char srcBufChar[100]={11,22,33,44};
memcpy(bufChar,srcBufChar,10*sizeof(char));
//bufChar:22
printf("bufChar:%d",bufChar[1]);
return 0;
}
二、數(shù)組與指針
注意:
1.指針的修飾符修飾的是指針一次讀取的數(shù)量
2.當(dāng)指針指向多維數(shù)組時(shí),只通過(guò)int就無(wú)法滿足要求,如int b[3][4],表示每行b[n]都存儲(chǔ)了sizeof(int)*4個(gè)字節(jié),指針定義時(shí)也需要做對(duì)應(yīng)的讀取數(shù)量調(diào)整,int (*p)[4]才能滿足,此處的()必須添加,讓編譯器優(yōu)先讀取*p,再通過(guò)int修飾符和[]識(shí)別指針的容量為sizeof(int)*4個(gè)字節(jié)
3.多維數(shù)組概念一致
int main()
{
int a[10];
int b[3][4];
int c[3][4][5];
int *p1 = a;
int(*p2)[4] = b;
int(*p3)[4][5] = c;
return 0;
}
總結(jié)
本章主要為C語(yǔ)言數(shù)組的概念及使用
本篇文章就到這里了,希望能給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
C++?OpenGL實(shí)現(xiàn)旋轉(zhuǎn)立方體的繪制
這篇文章主要主要為大家詳細(xì)介紹了如何利用C++和OpenGL實(shí)現(xiàn)旋轉(zhuǎn)立方體的繪制,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起動(dòng)手嘗試一下2022-07-07
C++11中模板隱式實(shí)例化與顯式實(shí)例化的定義詳解分析
實(shí)例化是為在程序中的函數(shù)模板本身并不會(huì)生成函數(shù)定義,它只是一個(gè)用于生成函數(shù)定義的方案。編譯器使用模板為特定類型生成函數(shù)定義時(shí),得到的是模板實(shí)例。這即是函數(shù)模板的實(shí)例化。而函數(shù)模板實(shí)例化又分為兩種類型:隱式實(shí)例化和顯式實(shí)例化2022-04-04
C++?OpenCV紅綠燈檢測(cè)Demo實(shí)現(xiàn)詳解
OpenCV(Open Source Computer Vision Library)是開(kāi)源的計(jì)算機(jī)視覺(jué)和機(jī)器學(xué)習(xí)庫(kù),提供了C++、 C、 Python、 Java接口,并支持Windows、 Linux、 Android、 Mac OS平臺(tái),下面這篇文章主要給大家介紹了關(guān)于C++?OpenCV紅綠燈檢測(cè)Demo實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下2022-11-11
C++11智能指針中的 unique_ptr實(shí)例詳解
unique是獨(dú)特的、唯一的意思,故名思議,unique_ptr可以“獨(dú)占”地?fù)碛兴赶虻膶?duì)象,它提供一種嚴(yán)格意義上的所有權(quán)。這篇文章主要介紹了C++11智能指針中的 unique_ptr實(shí)例詳解,需要的朋友可以參考下2020-06-06
基于C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單掃雷游戲
這篇文章主要為大家詳細(xì)介紹了基于C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單掃雷游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11
學(xué)習(xí)二維動(dòng)態(tài)數(shù)組指針做矩陣運(yùn)算的方法
這片文章介紹了如何利用二維動(dòng)態(tài)數(shù)組指針做矩陣運(yùn)算,需要的朋友可以參考下2015-07-07
在Qt中使用QtWebApp搭建HTTP服務(wù)器的詳細(xì)步驟
QtWebApp是一個(gè)開(kāi)源項(xiàng)目,它基于著名的Qt?Framework開(kāi)發(fā),提供了一種在C++環(huán)境中構(gòu)建HTTP服務(wù)器的解決方案,這篇文章主要給大家介紹了關(guān)于在Qt中使用QtWebApp搭建HTTP服務(wù)器的詳細(xì)步驟,需要的朋友可以參考下2024-07-07

