tft每日頭條

 > 生活

 > sizeof是自定義标識符嗎

sizeof是自定義标識符嗎

生活 更新时间:2025-02-23 22:23:42

我們在C語言編程時挨個兒輸出一個數組中的元素時,最常用的就是用一個for循環來實現,簡單了事。比如類似下面的C程序代碼片段:

for(i = 0; i< length; i ) { printf(“數組元素是%d”, 數組[i]); }

用一個下标索引變量i來遍曆整個C程序數組,length是數組的長度。當然了,length得提前計算出來,計算的方式有很多,很多朋友會想到用sizeof計算。不過,sizeof好歸好,但是也要睜大你的雙眼,小心用錯,你若不信,請繼續往下看。

先看傳統的做法,C程序代碼如下:

#include "stdio.h" int main(void) { int number[5] = {1,2,3,4,5}; int index = 0; printf("數組的元素分别是:\n"); for(index = 0;index < 5; index ) { printf("%d ", number[index]); } printf("\n"); return 0; }

最簡單的方法就是寫死了C語言數組長度,再用一個循環挨個兒輸出。程序清晰易懂,結果是:

sizeof是自定義标識符嗎(别混淆了sizeof數組名)1

結果也是清晰易懂。

有的朋友會突發奇想,為何不這樣來做:

#include "stdio.h" int main(void) { int number[5] = {1,2,3,4,5}; int index = 0; int *p = &number[0]; printf("數組的長度是: %d\n", sizeof(p)); printf("數組的元素分别是:\n"); for(index = 0;index < sizeof(p); index ) { printf("%d ", number[index]); } printf("\n"); return 0; }

增加了一個C語言指針變量p,指針變量p的初始值是數組首元素的地址。有的朋友企圖用sizeof(p)來獲取數組長度,這是不對的,請看結果:

sizeof是自定義标識符嗎(别混淆了sizeof數組名)2

從結果可以看到,sizeof(p)其實計算的是指針變量p的大小。在32位系統上,不管指針p指向的是整型數據,還是字符型數據,short型數據,long型數據等,指針p本身所占的内存字節數均為4。也就是要使用4個字節的大小來存儲變量p的值。

我還見過有朋友這樣用sizeof的,C程序代碼如下:

#include "stdio.h" void print(int number[5]) { int index = 0; ; printf("函數print中,數組長度是: %d ", sizeof(number)); printf("函數中數組的元素分别是:\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; }

這次C程序代碼又修改了一下,将數組名number傳給函數print,并且print函數的形參看上去像是一個數組。運行結果是

sizeof是自定義标識符嗎(别混淆了sizeof數組名)3

諾諾,運行結果不是預期中的結果啊。其實,C語言函數print形參看上去像是一個數組,于是有的朋友就會認為它就是一個數組,于是就發生了使用sizeof來計算數組長度;真實情況是print函數的參數還是一個指針,指針,指針,沒錯,就是一個C語言指針,所以sizeof(number)計算的還是指針的大小。初學的朋友們一定要切記!

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2025 - www.tftnews.com All Rights Reserved