亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

一.sizeof詳解

1.sizeof()作用

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

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

2.sizeof

sizeof是操作符,不是函數!?。?br />

  • sizeof 變量 或者 sizeof(變量)都可以
  • sizeof(類型)可以      sizeof 類型是錯誤的
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 ()內部的表達式不參與真實運算!這點很重要!其運算值在編譯時就計算好了

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

sizeof內部即使寫的是賦值表達式也不會去真實的運算,sizeof在計算的時候只看操作數的類型,不會訪問對應的空間

4.sizeof()與數組名的關系

sizeof(數組名):此時的數組名代表的是整個數組

**&數組名:此時的數組名代表的也是整個數組**

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

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

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

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

打印結果: >

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

二.strlen詳解

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

函數原型:

strlen()的模擬實現:

方法1:計數器

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(本身指向字符),然后遞歸下一個字符
 if (*str != '\0')
  return 1 + my_strlen3(str + 1);
 //遇到\0即返回0
 else
  return 0;
}

方法3:指針-指針

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

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

strlen()返回參數size_t造成的坑點

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

上述代碼打印結果:p1>p2

strlen(p1) 結果為

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

二者相減得到-1,也被認為是無符號整形,對應的值>0

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

共同點:返回類型都是size_t

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

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

int main()
{
 char arr1[] = { 'a','b','c' };
 int ret1 = strlen(arr1);
 int ret2 = sizeof(arr1);
 printf("%d %d\n", ret1,ret2);    //隨機值    3
//arr1并沒放入\0,strlen()向后直到找到\0才停止,所以是隨機值  而arr1本身數組元素個數為3,根據后面初始化的內容確定了數組的大小,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;
}

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

相關文章

  • C++ CryptoPP使用AES實現加解密詳解

    C++ CryptoPP使用AES實現加解密詳解

    Crypto++ (CryptoPP) 是一個用于密碼學和加密的 C++ 庫,提供了大量的密碼學算法和功能,這篇文章主要為大家介紹了C++ CryptoPP如何使用AES實現加解密,需要的可以參考下
    2023-11-11
  • C++實現銀行排隊系統

    C++實現銀行排隊系統

    這篇文章主要為大家詳細介紹了C++實現銀行排隊系統,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • opencv3/C++圖像濾波實現方式

    opencv3/C++圖像濾波實現方式

    今天小編就為大家分享一篇opencv3/C++圖像濾波實現方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • C語言水仙花數的實現

    C語言水仙花數的實現

    這篇文章主要介紹了C語言水仙花數的實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-01-01
  • C++實現簡易文本編輯器

    C++實現簡易文本編輯器

    這篇文章主要為大家詳細介紹了C++實現簡易文本編輯器,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • C++?右值引用與?const?關鍵字詳解

    C++?右值引用與?const?關鍵字詳解

    C++中的const關鍵字的用法非常靈活,而使用const將大大改善程序的健壯性,const關鍵字是一種修飾符,這篇文章主要介紹了C++?右值引用與?const?關鍵字,需要的朋友可以參考下
    2022-10-10
  • C/C++函數的調用約定的使用

    C/C++函數的調用約定的使用

    本文主要介紹了C/C++函數的調用約定的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-06-06
  • C++中std::sort函數介紹和使用場景

    C++中std::sort函數介紹和使用場景

    std::sort函數是C++標準庫中常用的排序函數之一,它可以對各種類型的序列進行排序,本文就來介紹一下C++中std::sort函數介紹和使用場景,感興趣的可以了解一下
    2024-02-02
  • c++中的string常用函數用法總結

    c++中的string常用函數用法總結

    以下是對c++中的string常用函數的用法進行了詳細的分析介紹,需要的朋友可以過來參考下
    2013-09-09
  • VC++文件監(jiān)控之ReadDirectoryChangesW

    VC++文件監(jiān)控之ReadDirectoryChangesW

    文章主要介紹文件監(jiān)控的另一種實現方式,利用ReadDirectoryChangesW來實現文件的監(jiān)控,希望對大家有幫助
    2019-04-04

最新評論