想弄懂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á)式必須求值為常量,例如:
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ù)組,例如:
ANSI C之前的編譯器可能不允許在自動(dòng)數(shù)組上進(jìn)行初始化 如果存在初始化值列表,但未 指定常量大小,則數(shù)組的大小與初始化值的數(shù)目相同
要聲明對(duì)另一個(gè)文件中定義的數(shù)組的外部引用,請(qǐng)使用extern int a[]; 字符串常量在C語(yǔ)言中,類型數(shù)組char用于表示字符串,字符串的結(jié)尾由設(shè)置為0的字節(jié)標(biāo)記(也稱為NUL字符) 以下定義都將其數(shù)組設(shè)置為相同的值:
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)單示例是:
指針可以包含一個(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ù)組 這段代碼:
將返回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í)視頻分享:
|
|