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

關(guān)于C語言strlen與sizeof區(qū)別詳情

 更新時(shí)間:2021年10月14日 10:57:39   作者:芒果在努力  
對(duì)于 strlen 和 sizeof,相信不少程序員會(huì)混淆其功能。雖然從表面上看它們都可以求字符串的長度,但二者卻存在著許多不同之處及本質(zhì)區(qū)別,今天得這篇文章我們就來學(xué)習(xí)C語言strlen與sizeof區(qū)別的相關(guān)資料,需要的朋友可以參考一下

strlen 是一個(gè)函數(shù),它用來計(jì)算指定字符串 str 的長度,但不包括結(jié)束字符(即 null 字符)。strlen所作的僅僅是一個(gè)計(jì)數(shù)器的工作,它從內(nèi)存的某個(gè)位置(可以是字符串開頭,中間某個(gè)位置,甚至是某個(gè)不確定的內(nèi)存區(qū)域)開始掃描,直到碰到第一個(gè)字符串結(jié)束符'\0'為止,然后返回計(jì)數(shù)器值(長度不包含'\0')

一.sizeof詳解

1.sizeof()作用

計(jì)算變量/類型所占內(nèi)存大小,單位是字節(jié)

int b =sizeof(a);    //a為int類型,大小為4個(gè)字節(jié)
int c = sizeof(int);   //4

2.sizeof

sizeof是操作符,不是函數(shù)?。?!

  • sizeof 變量 或者 sizeof(變量)都可以
  • sizeof(類型)可以      sizeof 類型是錯(cuò)誤的
int main()
{
 int a, b, c, d;
 a = sizeof(a);
 b = sizeof a;
 c = sizeof(int);
 //d = sizeof int; //err
 printf("%d %d %d\n", a, b, c);    // 4 4 4
 return 0;
}

3.sizeof ()

sizeof ()內(nèi)部的表達(dá)式不參與真實(shí)運(yùn)算!這點(diǎn)很重要!其運(yùn)算值在編譯時(shí)就計(jì)算好了

int main()
{
 int a = 10;
 int b = sizeof(a = a + 1);
 printf("%d %d \n", a, b);    // 10 4
 return 0;
}

sizeof內(nèi)部即使寫的是賦值表達(dá)式也不會(huì)去真實(shí)的運(yùn)算,sizeof在計(jì)算的時(shí)候只看操作數(shù)的類型,不會(huì)訪問對(duì)應(yīng)的空間

4.sizeof()與數(shù)組名的關(guān)系

sizeof(數(shù)組名):此時(shí)的數(shù)組名代表的是整個(gè)數(shù)組

**&數(shù)組名:此時(shí)的數(shù)組名代表的也是整個(gè)數(shù)組**

其他情況,數(shù)組名代表的是首元素地址

int arr[10];
a = sizeof(arr);    //計(jì)算的是整個(gè)數(shù)組的大小 4*10 = 10
b = sizeof(&arr);   //取出整個(gè)數(shù)組的地址,是地址(指針),4/8

5.sizeof()返回類型造成的坑

int i ; //全局變量未初始化系統(tǒng)默認(rèn)為0
int main()
{
    i--; //i變成-1
    if(i > sizeof(i))
    {
        printf(">\n");
    }
    else
    {
        printf("<\n");
    }
    return 0;
}

打印結(jié)果: >

注意:sizeof(i)和i比較時(shí),sizeof返回類型為size_t i的類型為int,最終是用size_t比較,對(duì)于-1的補(bǔ)碼為:全1序列,如果看成是無符號(hào)數(shù)的話,對(duì)于的值比sizeof(i) = 4

二.strlen詳解

strlen():求字符串長度的庫函數(shù),遇到\0即停止計(jì)算。需要引用 #include<string.h>頭文件,注意返回類型為:size_t(unsigned int 無符號(hào)整型),

函數(shù)原型:

strlen()的模擬實(shí)現(xiàn):

方法1:計(jì)數(shù)器

size_t my_strlen(const char* str)
{
 size_t count = 0;
 while (*str != '\0')
 {
  count++;
  str++;
 }
 return count;
}

方法2:遞歸

size_t my_strlen3(const char* str)
{
 //如果不是\0就+1(本身指向字符),然后遞歸下一個(gè)字符
 if (*str != '\0')
  return 1 + my_strlen3(str + 1);
 //遇到\0即返回0
 else
  return 0;
}

方法3:指針-指針

指針-指針得到的是二者之間元素的個(gè)數(shù)。所以只要一個(gè)指針指向字符串首字符,一個(gè)指針指向\0,二者相減就是字符串長度

size_t my_strlen2(const char* str)
{
 char* start = str;
 char* end = str;
 while (*end != '\0')
 {
  end++;
 }
 return end - start;
}

strlen()返回參數(shù)size_t造成的坑點(diǎn)

int main()
{
 char* p1 = "abcd";
 char* p2 = "abcde";
 
 
 if (strlen(p1) - strlen(p2)>0)
 {
  printf("p1>p2");
 }
 else
 {
  printf("p1<p2");
 }
 return 0;
}

上述代碼打印結(jié)果:p1>p2

strlen(p1) 結(jié)果為

 strlen(p2):結(jié)果為二者的類型都為size_t   無符號(hào)整形

二者相減得到-1,也被認(rèn)為是無符號(hào)整形,對(duì)應(yīng)的值>0

三.strlen與sizeof的區(qū)別

共同點(diǎn):返回類型都是size_t

不同點(diǎn):sizeof()是操作符計(jì)算的是變量/類型所占空間的大小,單位是字節(jié),\0也算進(jìn)空間

strlen()是庫函數(shù),計(jì)算的是字符串長度,不計(jì)算\0

int main()
{
 char arr1[] = { 'a','b','c' };
 int ret1 = strlen(arr1);
 int ret2 = sizeof(arr1);
 printf("%d %d\n", ret1,ret2);    //隨機(jī)值    3
//arr1并沒放入\0,strlen()向后直到找到\0才停止,所以是隨機(jī)值  而arr1本身數(shù)組元素個(gè)數(shù)為3,根據(jù)后面初始化的內(nèi)容確定了數(shù)組的大小,sizeof:3*1 = 3
 
 char arr[] = "abcdef";
 int ret3 = strlen(arr);
 int ret4 = sizeof(arr);
 printf("%d %d\n", ret3, ret4);    //6 7
//arr大小為7,含\0  strlen不算\0
 return 0;
}

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

相關(guān)文章

  • C語言make和Makefile介紹及使用

    C語言make和Makefile介紹及使用

    這篇文章介紹了C語言make和Makefile以及使用方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-01-01
  • C語言實(shí)現(xiàn)食堂就餐管理系統(tǒng)(帶鏈表)

    C語言實(shí)現(xiàn)食堂就餐管理系統(tǒng)(帶鏈表)

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)食堂就餐管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • 詳解C++中指針和引用的區(qū)別

    詳解C++中指針和引用的區(qū)別

    這篇文章主要介紹了C++中指針和引用的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • 漫畫講解C語言中最近公共祖先的三種類型

    漫畫講解C語言中最近公共祖先的三種類型

    這篇文章主要總結(jié)了使用C語言查找最近公共祖先的三種方法類型,用漫畫的方式講解原理定義,看上去更生動(dòng)形象,幫助你更好的理解透徹,快來跟著本文往下看吧
    2021-11-11
  • C++讀取wav文件中的PCM數(shù)據(jù)

    C++讀取wav文件中的PCM數(shù)據(jù)

    這篇文章主要為大家詳細(xì)介紹了C++讀取wav文件中的PCM數(shù)據(jù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • 一起來看看C語言的預(yù)處理注意點(diǎn)

    一起來看看C語言的預(yù)處理注意點(diǎn)

    這篇文章主要為大家詳細(xì)介紹了C語言的預(yù)處理,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • c語言中數(shù)組名a和&a詳細(xì)介紹

    c語言中數(shù)組名a和&a詳細(xì)介紹

    其實(shí)這兩個(gè)東西挺難理解的,應(yīng)該也沒有那么重要,了解一下好了,主要還是要多多理解數(shù)組指針的運(yùn)算
    2013-08-08
  • 在VC中隱藏控制臺(tái)程序窗口的實(shí)現(xiàn)代碼

    在VC中隱藏控制臺(tái)程序窗口的實(shí)現(xiàn)代碼

    大家都知道,當(dāng)編寫一個(gè)win32 console application時(shí),當(dāng)運(yùn)行此類程序的時(shí)候默認(rèn)情況下會(huì)有一個(gè)類似dos窗口的console窗口,但是有的時(shí)候我們只想在程序中運(yùn)行一段功能代碼,不希望顯示這個(gè)console窗口,讓代碼執(zhí)行完畢之后程序自動(dòng)退出
    2013-04-04
  • C++/GoLang如何實(shí)現(xiàn)自底向上的歸并排序

    C++/GoLang如何實(shí)現(xiàn)自底向上的歸并排序

    這篇文章主要給大家介紹了關(guān)于C++/GoLang如何實(shí)現(xiàn)自底向上的歸并排序的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • C++實(shí)現(xiàn)迷宮生成與解決

    C++實(shí)現(xiàn)迷宮生成與解決

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)迷宮生成與解決,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-12-12

最新評(píng)論

岑溪市| 乌兰察布市| 武山县| 东海县| 柳河县| 旅游| 大港区| 曲沃县| 定襄县| 阿拉善盟| 沁水县| 武安市| 启东市| 哈尔滨市| 辽宁省| 涿州市| 新和县| 楚雄市| 深水埗区| 青田县| 苗栗市| 改则县| 毕节市| 太仓市| 阿坝| 永泰县| 富川| 吉木萨尔县| 博湖县| 墨江| 嘉兴市| 星座| 桃江县| 马边| 永嘉县| 屏山县| 桓台县| 咸阳市| 南和县| 庆云县| 苏尼特左旗|