C語言的數組與指針可以這樣瞭解
前言
自學筆記,沒有歷史知識鋪墊(省略百度部分)C語言數組的概念及使用
一、數組的定義
char a[n];
註意:數組與指針非常相似
二者的區別:數組為常量,約定禁止二次賦值,即數組不應該出現在=左側,如:a=”HelloWorld”;數組在聲明時,會申請一段連續的內存空間,指針不會數組元素為變量,標記可以修改指向任意內存(實際上會copy右側變量/常量到左側數組元素變量中,產生兩份內存,如a[2]=”HelloWorld”;),而指針指向常量後,再指向其他常量會產生段錯誤異常
二者相同點:
C語言數組沒有越界問題,甚至可以a[-3]寫法,數組和指針都可以訪問任意內存地址的內容
int main(int argc, char **argv) { char a4 = 'A'; char a[2] = {'B', 'C'}; char a3 = 'D'; //讀取結果:41 ASCII中 16位的41對應字母A printf("讀取結果:%X", a[2]); return 0; }
二、數組空間的初始化
1. char數組賦值
char buf[10]={‘A’,’B’}; 等價於 char buf[]={‘A’,’B’};,前者數組長度為10,可在10范圍內增減,後者數組長度為聲明時數組當前的長度2,根據實際情況選擇,後續同原理
註意:上述賦值可以作為普通字符內存使用,不能當作字符串使用,如果當作字符串,需要如下賦值
char buf[3]={‘A’,’B’,’\0′};
char buf[3]={“ab”};
註意:上述賦值可以作為字符串使用,但不能作為普通字符內存使用,默認會多出\0
char buf[3]=”ab”;
註意:上述操作意義為:將右側的常量從常量區copy一份到左側的變量區,該操作會產生兩個存儲”ab”內存
右側”ab”是常量不可修改,左側buf變量的”ab”是可以修改的
2.char數組硬件開發規范
char buf[10];表示存儲的字符/字符串(最後一位為\0)unsigned char buf[10];表示交互普通數據(最高位可以用於數據操作,粒度為bit)嵌入式開發中禁止使用strcpy();函數(必須找到\0才會結束,有漏洞),copy可以使用strncpy();,內存copy可以使用memcpy();
拷貝三要素
srcdest個數
註意:內存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; }
二、數組與指針
註意:
1.指針的修飾符修飾的是指針一次讀取的數量
2.當指針指向多維數組時,隻通過int就無法滿足要求,如int b[3][4],表示每行b[n]都存儲瞭sizeof(int)*4個字節,指針定義時也需要做對應的讀取數量調整,int (*p)[4]才能滿足,此處的()必須添加,讓編譯器優先讀取*p,再通過int修飾符和[]識別指針的容量為sizeof(int)*4個字節
3.多維數組概念一致
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; }
總結
本章主要為C語言數組的概念及使用
本篇文章就到這裡瞭,希望能給你帶來幫助,也希望您能夠多多關註WalkonNet的更多內容!