国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

別混淆了sizeof(數(shù)組名)和sizeof(指針)

2019-11-08 02:17:20
字體:
供稿:網(wǎng)友

我們?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的值。“


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 平罗县| 柯坪县| 江安县| 义马市| 海宁市| 龙江县| 合江县| 安图县| 邵阳县| 潼南县| 汶上县| 光山县| 邵阳市| 新巴尔虎右旗| 威远县| 邵阳市| 肥东县| 乐安县| 夏津县| 志丹县| 漳平市| 康保县| 平湖市| 惠来县| 札达县| 高雄市| 东阳市| 雅江县| 赤壁市| 双桥区| 安顺市| 乐至县| 夹江县| 福州市| 定襄县| 香格里拉县| 潢川县| 楚雄市| 黄陵县| 呈贡县| 洪雅县|