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

C語言中sizeof()與strlen()的區(qū)別詳解

 更新時(shí)間:2020年12月01日 12:11:04   作者:zhaocx111222333  
這篇文章主要給大家介紹了關(guān)于C語言中sizeof()與strlen()區(qū)別的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

前言

sizeof()和strlen()經(jīng)常會(huì)被初學(xué)者混淆,但其中有有很大區(qū)別:

sizeof()

1. sizeof()【操作數(shù)所占空間的字節(jié)數(shù)大小】是一種c中的基本運(yùn)算符。

可以以類型、指針、數(shù)組和函數(shù)等作為參數(shù)。

頭文件類型為unsigned int。

運(yùn)算值在編譯的時(shí)候就出結(jié)果,所以可以用來定義數(shù)組維數(shù)。

char a[5]="123";
int b=sizeof(a);//b=5
int c=strlen(a);//c=3

sizeof()是一種單目操作符,是用來計(jì)算你所使用的操作數(shù)所占的空間字節(jié)大小。

strlen

2.strlen()[計(jì)算字符串的長度]是一種函數(shù)。

'\0'作為終止符;

strlen的結(jié)果運(yùn)行的時(shí)候才出來(不是編譯期求值),是計(jì)算字符串長度的。

其參數(shù)必須是字符型指針(char*)。

頭文件為#include<string.h>

size_t strlen(const char *str)//size_t()

以下是一些具體的實(shí)例(vs2013 設(shè)置為32位):

int main()
{
	char *p = "hello";
	char arr1 []= "hello";
	char arr2[] = { 'h', 'e', 'l', 'l', 'o' };
	printf("%d\n", sizeof( p));
	//結(jié)果4,因?yàn)橹羔樧兞康乃伎臻g大小僅僅和操作系統(tǒng)位數(shù)有關(guān)32-4,64-8
	printf("%d\n", sizeof(arr1));
	//結(jié)果6,字符串默認(rèn)以\0結(jié)尾,sizeof()包含\0的計(jì)算
	printf("%d\n", sizeof(arr2));
	//結(jié)果為5,因?yàn)闉樽址捅硎?,并不含有\(zhòng)0(僅僅字符串有\(zhòng)0)
	printf("%d\n", strlen( p));
	//結(jié)果為5,strlen求的是字符串的長度,不包含\0
	printf("%d\n", strlen(arr1));
	//結(jié)果為5,strlen求的是字符串的長度,不包含\0
	printf("%d\n", strlen(arr2));
	//因?yàn)樽址筒话琝0,但字符串需要找到\0才可結(jié)束,所以在'o'之后繼續(xù)向后讀取直到找到\0,所以是一個(gè)隨機(jī)值

程序運(yùn)行結(jié)果如上

結(jié)果如上;

設(shè)置為32位操作系統(tǒng)

后補(bǔ)一個(gè)注意事項(xiàng):

#include <stdio.h>
int main()
{
 int arr[] = {1,2,(3,4),5};//整型數(shù)組
 printf("%d\n", sizeof(arr));
 return 0;
}

注意數(shù)組的數(shù)據(jù)類型,char只占一個(gè)字節(jié),而int 數(shù)據(jù)類型四個(gè)字節(jié)哦,別忘了*4。前面的例子是char的。

#include <stdio.h>
int main()
{
 char arr[] = {1,2,(3,4),5};//字符型
 printf("%d\n", sizeof(arr));
 return 0;
}

大量案例(想深入了解可以看)

2020年11月19日補(bǔ)充:

補(bǔ)充幾個(gè)題:

1.(花括號(hào)int的sizeof())

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int arr[] = { 1, 2, 3, 4 };
	printf("%d\n", sizeof(arr)); // 16
	printf("%d\n", sizeof(arr + 0)); // 4 求 sizeof(int*)
	printf("%d\n", sizeof(*arr)); // 4, 求 sizeof(int)
	printf("%d\n", sizeof(arr + 1)); // 4, 求 sizeof(int*)
	printf("%d\n", sizeof(arr[1])); // 4, 求 sizeof(int)
	printf("%d\n", sizeof(&arr));// 4, 求 sizeof(int(*)[4]);
	printf("%d\n", sizeof(*&arr));// 16, 求 sizeof(int[4]);
	printf("%d\n", sizeof(&*arr));// 4, 求 sizeof(int*)
	printf("%d\n", sizeof(&arr + 1)); // 4, 求 sizeof(int(*)[4])
	printf("%d\n", sizeof(&arr[0])); // 4, 求 sizeof(int*)
	printf("%d\n", sizeof(&arr[0] + 1)); // 4, 求 sizeof(int*)
	system("pause");
	return 0;
}

花括號(hào)定義不帶'\0',所以求strlen就是未定義行為,所以就只有sizeof().

2.(花括號(hào)char的sizeof())

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char arr[] = { 'a', 'b', 'c', 'd', 'e', 'f' };
	printf("%d\n", sizeof(arr)); // 6, sizeof(char[6])
	printf("%d\n", sizeof(arr + 0)); // 4, sizeof(char*)
	printf("%d\n", sizeof(*arr)); // 1, sizeof(char)
	printf("%d\n", sizeof(arr + 1)); // 4
	printf("%d\n", sizeof(arr[1]));// 1, sizeof(char)
	printf("%d\n", sizeof(&arr));// 4, sizeof(char(*)[6])
	printf("%d\n", sizeof(*&arr)); // 6, sizeof(char[6])
	printf("%d\n", sizeof(&*arr));// 4, sizeof(char*)
	printf("%d\n", sizeof(&arr[1] + 1)); // 4, sizeof(char*)
	printf("%d\n", sizeof(&arr + 1)); // 4, sizeof(char(*)[6]);	
	system("pause");
	return 0;
}

花括號(hào)定義不帶'\0',所以求strlen就是未定義行為,所以就只有sizeof().

3.(字符串char的sizeof()和strlen)

char arr[] = "abcdef";
	printf("%d\n", sizeof(arr)); // 7, sizeof(char[7]);
	printf("%d\n", sizeof(arr + 0)); // 4, sizeof(char*)
	printf("%d\n", sizeof(*arr)); // 1, sizeof(char)
	printf("%d\n", sizeof(arr[1])); // 1, sizeof(char)
	printf("%d\n", sizeof(&arr[0] + 1)); // 4, sizeof(char*)
	printf("%d\n", sizeof(&arr)); // 4 sizeof(char(*)[7])
	printf("%d\n", sizeof(*&arr)); // 7 sizeof(char[7])
	printf("%d\n", sizeof(&*arr)); // 4 sizeof(char*)
	printf("%d\n", sizeof(&arr + 1)); // 4 sizeof(char(*)[7])

	printf("%d\n", strlen(arr)); // 6
	printf("%d\n", strlen(arr + 1)); // 5
	printf("%d\n", strlen(&arr + 1)); //類型不匹配
	printf("%d\n", strlen(&arr)); // 類型不匹配
	printf("%d\n", strlen(&arr[0])); // 6
	printf("%d\n", strlen(*&arr)); // 6
	printf("%d\n", strlen(&*arr)); // 6
	printf("%d\n", strlen(&arr[1] + 1));//4

strlen中類型不匹配是因?yàn)樗麄兊臄?shù)據(jù)類型不是char*.

4.(指針定義的sizeof()和strlen)

這個(gè)例題其實(shí)有點(diǎn)偏題了,涉及到指針和數(shù)組的隱式轉(zhuǎn)化(感興趣的可以去看我的博客–指針基礎(chǔ)總結(jié)詳解(里面有指針和數(shù)組的講解))

char* p = "abcdef";

	printf("%d\n", sizeof(p)); // 4 sizeof(char*)
	printf("%d\n", sizeof(p + 1)); // 4 sizeof(char*)
	printf("%d\n", sizeof(*p)); // 1 sizeof(char)
	printf("%d\n", sizeof(p[0])); // 1 sizeof(char)
	printf("%d\n", sizeof(&p)); // 4 sizeof(char**)
	printf("%d\n", sizeof(&p[1] + 1)); // 4 sizeof(char*)
	printf("%d\n", sizeof(*&p)); // 4 sizeof(char*)
	printf("%d\n", sizeof(&*p)); // 4 sizeof(char*)

	printf("%d\n", strlen(p)); // 6
	printf("%d\n", strlen(p + 1)); // 5
	printf("%d\n", strlen(*p)); // 類型不匹配
	printf("%d\n", strlen(p[1])); // 類型不匹配
	printf("%d\n", strlen(&p)); // 類型不匹配. 
	printf("%d\n", strlen(&p[1] + 1)); // 4
	printf("%d\n", strlen(*&p)); // 6
	printf("%d\n", strlen(&*p)); // 6


strlen中類型不匹配是因?yàn)樗麄兊臄?shù)據(jù)類型不是char*.

5.(花括號(hào)二維數(shù)組int的sizeof())

int arr[3][4] = { 0 };
	printf("%d\n", sizeof(arr)); // 48 sizeof(int[3][4])
	printf("%d\n", sizeof(arr[0])); // 16 sizeof(int[4])
	// arr[0] int[4], 再 + 1, 就把 int[4] 轉(zhuǎn)成 int* 了
	printf("%d\n", sizeof(arr[0] + 1)); // 4 sizeof(int*)
	printf("%d\n", sizeof(&arr[0] + 1)); // 4 sizeof(int(*)[4])
	printf("%d\n", sizeof(arr[0][0])); // 4 sizeof(int)
	printf("%d\n", sizeof(*arr[0])); // 4, sizeof(int)
	// arr 是二維數(shù)組 int[3][4] => int(*)[4] => * => int[4]
	 printf("%d\n", sizeof(*arr)); // 16 sizeof(int[4])
	// arr + 1 => int(*)[4] => * => int[4]
	printf("%d\n", sizeof(*(arr + 1))); // 16 sizeof(int[4])
	// arr => int[3][4] => int(*)[4] => * => int[4] => +1 => int*
	printf("%d\n", sizeof(*arr + 1));
	// 4 arr[0] => int[4] => & => int(*)[4] => +1 => int(*)[4]
	printf("%d\n", sizeof(&arr[0] + 1)); // 4 sizeof(int(*)[4])

	printf("%d\n", sizeof(*(arr[0] + 1)));
	// 4 arr[0] => int[4] => +1 => int* => * => int


到此這篇關(guān)于C語言中sizeof()與strlen()區(qū)別的文章就介紹到這了,更多相關(guān)C語言sizeof()與strlen()區(qū)別內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解C語言中的指針與數(shù)組的定義與使用

    詳解C語言中的指針與數(shù)組的定義與使用

    這篇文章主要介紹了C語言中的指針與數(shù)組的定義與使用,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-12-12
  • C++實(shí)現(xiàn)LeetCode(63.不同的路徑之二)

    C++實(shí)現(xiàn)LeetCode(63.不同的路徑之二)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(63.不同的路徑之二),本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • 純C語言:遞歸組合數(shù)源碼分享

    純C語言:遞歸組合數(shù)源碼分享

    這篇文章主要介紹了純C語言:遞歸組合數(shù)源碼,有需要的朋友可以參考一下
    2014-01-01
  • C語言清楚了解指針的使用

    C語言清楚了解指針的使用

    C語言這門課程在計(jì)算機(jī)的基礎(chǔ)教學(xué)中一直占有比較重要的地位,然而要想突破C語言的學(xué)習(xí),對指針的掌握是非常重要的,本文將具體針對指針的基礎(chǔ)做詳盡的介紹
    2022-06-06
  • 針對Ruby的Selenium WebDriver安裝指南

    針對Ruby的Selenium WebDriver安裝指南

    這篇文章主要介紹了針對Ruby的Selenium WebDriver安裝指南,Selenium直接運(yùn)行于瀏覽器之中,是進(jìn)行各種調(diào)試的一大神器,需要的朋友可以參考下
    2015-07-07
  • 簡單分析C語言中指針數(shù)組與數(shù)組指針的區(qū)別

    簡單分析C語言中指針數(shù)組與數(shù)組指針的區(qū)別

    這篇文章主要介紹了C語言中指針數(shù)組與數(shù)組指針的區(qū)別,是C語言入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-11-11
  • C++結(jié)合OpenCV實(shí)現(xiàn)RRT算法(路徑規(guī)劃算法)

    C++結(jié)合OpenCV實(shí)現(xiàn)RRT算法(路徑規(guī)劃算法)

    這篇文章主要介紹了C++結(jié)合OpenCV實(shí)現(xiàn)RRT算法,RRT算法整體框架主要分為rand、near、new三點(diǎn)的建立和near與new之間的安全性檢查,需要的朋友可以參考下
    2022-05-05
  • C++實(shí)現(xiàn)推箱子小游戲

    C++實(shí)現(xiàn)推箱子小游戲

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)推箱子小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-01-01
  • C++取得本機(jī)IP的方法

    C++取得本機(jī)IP的方法

    這篇文章主要介紹了C++取得本機(jī)IP的方法,代碼簡單功能實(shí)用,具有不錯(cuò)的借鑒參考價(jià)值,需要的朋友可以參考下
    2014-10-10
  • Qt使用QPainter實(shí)現(xiàn)自定義圓形進(jìn)度條

    Qt使用QPainter實(shí)現(xiàn)自定義圓形進(jìn)度條

    這篇文章主要介紹了Qt如何使用QPainter實(shí)現(xiàn)自定義圓形進(jìn)度條功能,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)Qt有一定的幫助,需要的可以參考一下
    2022-06-06

最新評論

台北县| 泰兴市| 双鸭山市| 都江堰市| 广宗县| 涪陵区| 上杭县| 如东县| 沈丘县| 鄂托克前旗| 精河县| 延安市| 定陶县| 大姚县| 嘉黎县| 深水埗区| 滕州市| 锡林浩特市| 吉隆县| 留坝县| 华宁县| 玛沁县| 亚东县| 泾源县| 当雄县| 青阳县| 铁岭县| 阿克苏市| 会宁县| 体育| 于田县| 汉寿县| 南开区| 天全县| 东丽区| 潢川县| 裕民县| 屏南县| 长武县| 酉阳| 吴江市|