最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解C語言中sizeof如何在自定義函數(shù)中正常工作

 更新時(shí)間:2022年05月11日 16:08:52   作者:zxa1334  
在main函數(shù)中,sizeof是可以正常工作的,但是在自定義函數(shù)中就不可以了。所以本文將為大家詳細(xì)講解一下如何解決這一問題,感興趣的可以了解一下

1、在main函數(shù)中,sizeof是可以正常工作的,比如:

int main()
{
	int n[5];
	printf("input: \n");
	int i ;
	for(i = 0; i < 5; i++)
	{
		scanf("%d",n + i);
	}
	int len = sizeof(n)/sizeof(n[0]);
	printf("%d\n",len);
	return 0;
}

2、但是在自定義函數(shù)中就不可以了,如下:

#include <stdio.h>
void print_1(int n[])
{
	int i;
	int len = sizeof(n)/sizeof(n[0]);
	printf("len : %d\n",len);
	for(i  = 0; i < len; i++)
	{
		printf("%d",n[i]);
	}
	
	printf("\n");
}
int main()
{
	int n[5];
	printf("input: \n");
	int i ;
	for(i = 0; i < 5; i++)
	{
		scanf("%d",n + i);
	}
 
	print_1(n);
	printf("\n");
	return 0;
}

3、至于原因以及解決方法感覺有篇博客說的比較好

原因在于:第一,在c中,數(shù)組在作為參數(shù)的時(shí)候就退化為指針,對一個(gè)地址來取大小呢,如果是32位系統(tǒng)的話即為4,如果是64位系統(tǒng)的話為8,所以呢,在函數(shù)中sizeof獲取的是指針的長度而不是數(shù)組的長度。第二呢,在函數(shù)中,sizeof的處理時(shí)間的在編譯期,也就是說對于動態(tài)生成的數(shù)組大小是不能用sizeof來算出來的。

4、解決辦法

第一種辦法

把數(shù)組作為參數(shù)傳入到數(shù)組的同時(shí)呢,也傳入該數(shù)組的長度進(jìn)去。不過該辦法需要在函數(shù)外獲取該數(shù)組的長度才傳進(jìn)去,略顯麻煩。比如講上述代碼的打印函數(shù)的函數(shù)名print(int *n) ; 改成print(int *n ,int len);其中l(wèi)en代表數(shù)組n的長度

第二種辦法

采用宏定義,但是這種方法個(gè)人感覺顯得有些啰嗦

第三種辦法

C++可以用vector等容器避免大部分?jǐn)?shù)組的操作,對于字符數(shù)組也有string可以替代,也有可以傳遞數(shù)組大小的奇跡淫巧。如果你需要計(jì)算數(shù)組長度的函數(shù),可以使用宏定義 或者 如果是C++,也用相應(yīng)的模板技巧,這比宏定義安全。

template <size_t N>
long calc(long (&array)[N]) // 利用模板傳遞參數(shù) array是數(shù)組的引用
{
    long res = 0L;
 
    for (size_t i = 0;i < N;i ++) {
        res += array[i];
    }
 
    return res;
}
 
int main()
{
    long longarr[] = {1, 23, 4, 45, 46, 57,};
 
    long sum = calc(longarr);
}

總結(jié):在寫這些小的程序時(shí),若沒有特殊要求,直接將數(shù)組的長度確定,就不需要這么麻煩了

到此這篇關(guān)于詳解C語言中sizeof如何在自定義函數(shù)中正常工作的文章就介紹到這了,更多相關(guān)C語言sizeof內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • c++學(xué)習(xí)之構(gòu)造函數(shù)

    c++學(xué)習(xí)之構(gòu)造函數(shù)

    類多么重要我就不多說了,只講講學(xué)習(xí),因?yàn)閭€(gè)人認(rèn)為類的學(xué)習(xí)無論從概念的理解還是實(shí)際代碼的編寫相對其他C兼容向的代碼都是比較有難度的, 對于以前學(xué)C 的人來說這才是真正的新概念和內(nèi)容,STL其實(shí)還比較好理解,不就是一個(gè)更大的函數(shù)庫和代碼可以使用嘛。
    2015-06-06
  • Qt中PaintEvent繪制實(shí)時(shí)波形圖的實(shí)現(xiàn)示例

    Qt中PaintEvent繪制實(shí)時(shí)波形圖的實(shí)現(xiàn)示例

    本文主要介紹了Qt中PaintEvent繪制實(shí)時(shí)波形圖的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • C++中初始化二維數(shù)組的幾種常見方法

    C++中初始化二維數(shù)組的幾種常見方法

    本文詳細(xì)介紹了在C++中初始化二維數(shù)組的不同方式,包括靜態(tài)初始化、循環(huán)、全部為零、部分初始化、std::array和std::vector,以及std::vector作為動態(tài)二維數(shù)組的靈活性和應(yīng)用場景,需要的朋友可以參考下
    2025-04-04
  • C語言實(shí)現(xiàn)經(jīng)典24點(diǎn)算法

    C語言實(shí)現(xiàn)經(jīng)典24點(diǎn)算法

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)經(jīng)典24點(diǎn)算法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • C++ 逗號運(yùn)算符的具體使用

    C++ 逗號運(yùn)算符的具體使用

    本文主要介紹了C++ 逗號運(yùn)算符的具體使用,使用逗號運(yùn)算符是為了把幾個(gè)表達(dá)式放在一起,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-08-08
  • C++ Sort函數(shù)使用場景分析

    C++ Sort函數(shù)使用場景分析

    sort函數(shù)是algorithm庫下的一個(gè)函數(shù),sort函數(shù)是不穩(wěn)定的,即大小相同的元素在排序后相對順序可能發(fā)生改變,如果某些場景需要保持相同元素間的相對順序,可使用stable_sort函數(shù),接下來通過本文給大家介紹C++ Sort函數(shù)詳解,感興趣的朋友一起看看吧
    2025-04-04
  • C語言中字符串的內(nèi)存地址操作的相關(guān)函數(shù)簡介

    C語言中字符串的內(nèi)存地址操作的相關(guān)函數(shù)簡介

    這篇文章主要介紹了C語言中字符串的內(nèi)存地址操作的相關(guān)函數(shù),包括bcopy()函數(shù)和bzero()函數(shù)以及bcmp()函數(shù),需要的朋友可以參考下
    2015-08-08
  • VC++?2019?"const?char*"類型的實(shí)參與"LPCTSTR"類型的形參不兼容解決

    VC++?2019?"const?char*"類型的實(shí)參與"LPCTSTR"

    這篇文章主要給大家介紹了關(guān)于VC++?2019?"const?char*"類型的實(shí)參與"LPCTSTR"類型的形參不兼容的解決方法,文中通過圖文介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2023-03-03
  • C語言超全面define預(yù)處理指令的使用說明

    C語言超全面define預(yù)處理指令的使用說明

    C語言里可以用#define定義一個(gè)標(biāo)識符來表示一個(gè)常量。特點(diǎn)是:定義的標(biāo)識符不占內(nèi)存,只是一個(gè)臨時(shí)的符號,預(yù)編譯后這個(gè)符號就不存在了,也不做類型定義。預(yù)編譯又叫預(yù)處理
    2022-04-04
  • C語言中的long型究竟占4個(gè)字節(jié)還是8個(gè)字節(jié)(遇到的坑)

    C語言中的long型究竟占4個(gè)字節(jié)還是8個(gè)字節(jié)(遇到的坑)

    小編在復(fù)習(xí)C語言的時(shí)候踩到了不少坑,糾結(jié)long類型究竟占4個(gè)字節(jié)還是8個(gè)字節(jié)呢?好,今天通過本文給大家分享下我的詳細(xì)思路,感興趣的朋友跟隨小編一起看看吧
    2021-11-11

最新評論

阳朔县| 扬州市| 广西| 永嘉县| 普兰店市| 济源市| 西安市| 乐山市| 孝义市| 惠州市| 泰和县| 新营市| 莒南县| 益阳市| 洪雅县| 河源市| 黔江区| 吴桥县| 湟源县| 班戈县| 澄城县| 丰镇市| 油尖旺区| 拉萨市| 长汀县| 敦煌市| 绥滨县| 阳信县| 满城县| 衢州市| 平原县| 阿巴嘎旗| 平昌县| 观塘区| 安乡县| 黑龙江省| 江山市| 新营市| 上杭县| 马龙县| 梅州市|