国产探花免费观看_亚洲丰满少妇自慰呻吟_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ā)表
主站蜘蛛池模板: 沧州市| 蓝田县| 永丰县| 邵阳县| 黄浦区| 昭通市| 广河县| 容城县| 伊吾县| 新兴县| 龙游县| 华蓥市| 诏安县| 体育| 沾化县| 德令哈市| 介休市| 滨州市| 井冈山市| 翁牛特旗| 乳山市| 南宁市| 景德镇市| 福州市| 偃师市| 三明市| 霞浦县| 阿克陶县| 尼木县| 焦作市| 衡南县| 临安市| 博湖县| 宜春市| 博白县| 日土县| 罗江县| 宁陕县| 兴文县| 平湖市| 正宁县|