我們?cè)诎€(gè)兒輸出一個(gè)數(shù)組中的元素時(shí),最常用的就是用一個(gè)for循環(huán)來實(shí)現(xiàn),簡(jiǎn)單了事。比如類似下面的代碼片段:
for(i = 0; i< length; i++)
{
PRintf(“數(shù)組元素是%d”, 數(shù)組[i]);
}
用一個(gè)下標(biāo)索引變量i來遍歷整個(gè)數(shù)組,length是數(shù)組的長(zhǎng)度。當(dāng)然了,length得提前計(jì)算出來,計(jì)算的方式有很多,很多朋友會(huì)想到用sizeof計(jì)算。不過,sizeof好歸好,但是也要睜大你的雙眼,小心用錯(cuò),你若不信,請(qǐng)繼續(xù)往下看。
先看傳統(tǒng)的做法,代碼如下:#include "stdio.h"int main(void) { int number[5] = {1,2,3,4,5}; int index = 0; printf("數(shù)組的元素分別是:/n"); for(index = 0;index < 5; index++) { printf("%d ", number[index]); } printf("/n"); return 0;}最簡(jiǎn)單的方法就是寫死了數(shù)組長(zhǎng)度,再用一個(gè)循環(huán)挨個(gè)兒輸出。程序清晰易懂,結(jié)果是:

結(jié)果也是清晰易懂。有的朋友會(huì)突發(fā)奇想,為何不這樣來做:
#include "stdio.h"int main(void) { int number[5] = {1,2,3,4,5}; int index = 0; int *p = &number[0]; printf("數(shù)組的長(zhǎng)度是: %d/n", sizeof(p)); printf("數(shù)組的元素分別是:/n"); for(index = 0;index < sizeof(p); index++) { printf("%d ", number[index]); } printf("/n"); return 0;}增加了一個(gè)指針變量p,指針變量p的初始值是數(shù)組首元素的地址。有的朋友企圖用sizeof(p)來獲取數(shù)組長(zhǎng)度,這是不對(duì)的,請(qǐng)看結(jié)果:
從結(jié)果可以看到,sizeof(p)其實(shí)計(jì)算的是指針變量p的類型的大小。指針p的類型是指向整數(shù)類型的指針,因此其大小為4,所以這樣做是不對(duì)的。(這段話有知友指出描述錯(cuò)誤。作者在文末已作出更新。感謝這位知友。)
我還見過有朋友這樣用sizeof的,代碼如下:
#include "stdio.h"void print(int number[5]) { int index = 0; ; printf("函數(shù)print中,數(shù)組長(zhǎng)度是: %d ", sizeof(number)); printf("函數(shù)中數(shù)組的元素分別是:/n"); for(index = 0; index < sizeof(number) / sizeof(number[0]); index++) { printf("%d ", number[index]); } printf("/n");} int main(void) { int number[5] = {1,2,3,4,5}; print(number); return 0;}這次代碼又修改了一下,將數(shù)組名number傳給函數(shù)print,并且print函數(shù)的形參看上去像是一個(gè)數(shù)組。運(yùn)行結(jié)果是
諾諾,運(yùn)行結(jié)果不是預(yù)期中的結(jié)果啊。其實(shí),函數(shù)print形參看上去像是一個(gè)數(shù)組,于是有的朋友就會(huì)認(rèn)為它就是一個(gè)數(shù)組,于是就發(fā)生了使用sizeof來計(jì)算數(shù)組長(zhǎng)度;真實(shí)情況是print函數(shù)的參數(shù)還是一個(gè)指針,指針,指針,沒錯(cuò),就是一個(gè)指針,所以sizeof(number)計(jì)算的還是指針的大小。初學(xué)的朋友們一定要切記!
==========================2017年1月22日更新===============
感謝知友 夢(mèng)人亦冷 指出文中描述的一個(gè)錯(cuò)誤的地方。
文中描述有如下描述:
”從結(jié)果可以看到,sizeof(p)其實(shí)計(jì)算的是指針變量p的類型的大小。指針p的類型是指向整數(shù)類型的指針,因此其大小為4“
此處做如下更正:
”從結(jié)果可以看到,sizeof(p)其實(shí)計(jì)算的是指針變量p的大小。在32位系統(tǒng)上,不管指針p指向的是整型數(shù)據(jù),還是字符型數(shù)據(jù),short型數(shù)據(jù),long型數(shù)據(jù)等,指針p本身所占的內(nèi)存字節(jié)數(shù)均為4。也就是要使用4個(gè)字節(jié)的大小來存儲(chǔ)變量p的值。“
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注