日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

C/C++編程筆記:C數(shù)組、字符串常量和指針!三分鐘弄懂它

 路人甲Java 2021-06-14

想弄懂C語(yǔ)言中數(shù)組和指針的關(guān)系嗎?這篇文章就占據(jù)你三分鐘時(shí)間,看完你肯定會(huì)有收獲!

數(shù)組

數(shù)組聲明為 數(shù)據(jù)類型 名稱[ constant-size ],并將一個(gè)數(shù)據(jù)類型的一個(gè)或多個(gè)實(shí)例分組到一個(gè)可尋址的位置

constant-size可能是一個(gè)表達(dá)式,但是該表達(dá)式必須求值為常量,例如:

#定義MAX_SIZE 16

...

int列表[MAX_SIZE + 1];

C數(shù)組開始于元素0,所以像陣列定義 int a[3];將創(chuàng)建三個(gè)int元件,可尋址如a[0],a[1],和a[2]

        請(qǐng)注意,即使定義很難說a[3],也沒有名為a[3]

與其他變量一樣,全局和靜態(tài)數(shù)組元素默認(rèn)情況下初始化為0,并且自動(dòng)數(shù)組元素填充有垃圾值

可以使用大括號(hào)中的一個(gè)或多個(gè)值來初始化數(shù)組,例如:

int a[3] = {5, -2, 17};

        ANSI C之前的編譯器可能不允許在自動(dòng)數(shù)組上進(jìn)行初始化

如果存在初始化值列表,但未 指定常量大小,則數(shù)組的大小與初始化值的數(shù)目相同

int q[] = {1, 2, 3}; 是相同的

int q[3] = {1, 2, 3};

要聲明對(duì)另一個(gè)文件中定義的數(shù)組的外部引用,請(qǐng)使用extern int a[];

字符串常量

在C語(yǔ)言中,類型數(shù)組char用于表示字符串,字符串的結(jié)尾由設(shè)置為0的字節(jié)標(biāo)記(也稱為NUL字符)

以下定義都將其數(shù)組設(shè)置為相同的值:

int str1 [] = {'a','b','c','\ 0'};

int str2 [] =“ abc”;

ANSI C還允許定義像int str[3] = "abc"; ,其是相同的int str[3] = {'a', 'b', 'c'}; (省略了最終NUL字符)

 

多維數(shù)組

多維數(shù)組只是數(shù)組的數(shù)組(數(shù)組的數(shù)組...)

類似的多維數(shù)組m[3][2]存儲(chǔ)在連續(xù)的存儲(chǔ)位置中,例如m [0] [0],m [0] [1],m [1] [0],m [1] [1],m [2] [0] ,m [2] [1]

指針

指針是包含變量地址的變量

有兩個(gè)與指針關(guān)聯(lián)的運(yùn)算符:

        該&操作符返回其參數(shù)的地址

        該*引用它的參數(shù)通過指針訪問對(duì)象指針

指針的一個(gè)簡(jiǎn)單示例是:

int i,j;

int * p; / *指向'int'的指針* /

我= 6;

p =&i; / *將`p'設(shè)置為`i'的地址* /

j = * p; / *將'j'設(shè)置為6('i'的值)* /

* p = 5; / *將'i'設(shè)置為5 * /

指針可以包含一個(gè)地址或一個(gè)稱為空指針的特殊值,該值不同于所有有效指針

        指針上下文中的0將在編譯時(shí)轉(zhuǎn)換為空指針

        還有一個(gè)預(yù)處理器宏NULL(在<stdio.h>或中 定義 <stdlib.h>)

        像expression這樣的表達(dá)式將導(dǎo)致 語(yǔ)句是否為空指針,因?yàn)樗c相同, 并且由于在指針上下文中將其轉(zhuǎn)換為空指針,因此代碼將與空指針 進(jìn)行隱式比較if (!ptr) statementptrif (ptr)if (ptr == 0)0ptr

同樣,將評(píng)估聲明,如果是不是一個(gè)空指針 if (ptr) statementptr

指針不能指向:

常數(shù)(像3,不const類似s const int a;)由于值3不具有永久的存儲(chǔ)器地址

register 變量,因?yàn)榧拇嫫鞑辉趦?nèi)存中,因此沒有內(nèi)存地址

類似的表達(dá)式(8 * k),它們與常量大致相同,因?yàn)樗鼈儧]有永久的內(nèi)存地址

 

指針和數(shù)組

指針可以視為數(shù)組

這段代碼:

int main(void){

int a [3] = {6,3,7};

int * p =&a [0]; / *將`p'指向`a'的第一個(gè)元素* /

if(a [0] == p [0] && a [1] == p [1] && a [2] == p [2])

return 1;

else  

return 0;

}

將返回1,因?yàn)橹赶?nbsp;n的所有有效值p[n]a[n]

指針是沒有,不過,同為數(shù)組

這是C語(yǔ)言最令人困惑的部分之一,因此這里有三種不同的方式來說明數(shù)組a 與指向p第一個(gè)元素的指針之間的區(qū)別a :

技術(shù)說明:使用直接尋址訪問數(shù)組,使用間接尋址訪問指針

較少技術(shù)的解釋:a是一個(gè)地址, p是一個(gè)保存以下地址的地址a

極其羅嗦解釋:檢索值從 ,在計(jì)算機(jī)啟動(dòng)時(shí)的地址,移動(dòng)?過去,并獲取價(jià)值從那里; 要從中檢索值,計(jì)算機(jī)將從地址開始,獲取存儲(chǔ)在其中的地址并向其添加n,然后從結(jié)果地址中 獲取值a[n]ap[n]p

但是,在大多數(shù)情況下,指針和數(shù)組訪問可被視為具有相同的作用,主要的例外是:

1)sizeof 運(yùn)算符

sizeof(array) 返回所有元素中使用的內(nèi)存量 array

sizeof(pointer)僅返回pointer變量本身使用的內(nèi)存量

2)&運(yùn)算符

&array是的別名,&array[0]并返回中第一個(gè)元素的地址array

&pointer 返回的地址 pointer

3)字符數(shù)組的字符串文字初始化

char array[] = "abc"將前四個(gè)元素設(shè)置 array為'a','b','c'和'\ 0'

char *pointer = "abc"設(shè)置pointer為“ abc”字符串的地址(可能存儲(chǔ)在只讀存儲(chǔ)器中,因此不可更改)

此外,無法調(diào)整數(shù)組大小或重新分配數(shù)組。

另外如果你想更好的提升你的編程能力,學(xué)好C語(yǔ)言C++編程!彎道超車,快人一步!筆者這里或許可以幫到你~

C語(yǔ)言C++編程學(xué)習(xí)交流圈子,QQ群1090842465點(diǎn)擊進(jìn)入】微信公眾號(hào):C語(yǔ)言編程學(xué)習(xí)基地

分享(源碼、項(xiàng)目實(shí)戰(zhàn)視頻、項(xiàng)目筆記,基礎(chǔ)入門教程)

歡迎轉(zhuǎn)行和學(xué)習(xí)編程的伙伴,利用更多的資料學(xué)習(xí)成長(zhǎng)比自己琢磨更快哦!

編程學(xué)習(xí)書籍分享:

編程學(xué)習(xí)視頻分享:

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多