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

C語(yǔ)言sizeof與字符串處理與動(dòng)態(tài)內(nèi)存分配及main函數(shù)參數(shù)詳解

 更新時(shí)間:2022年07月11日 08:56:28   作者:ChampLixxx  
這篇文章主要介紹了C語(yǔ)言字符串處理函數(shù)、sizeof、動(dòng)態(tài)內(nèi)存分配函數(shù)、main函數(shù)參數(shù)問(wèn)題,static在修飾變量的時(shí)候,如果是修飾全局變量,則跟全局變量功能一樣,通過(guò)示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下

常用的字符串處理函數(shù)(標(biāo)準(zhǔn)庫(kù)里面的)

strlen : 用來(lái)求一個(gè)字符串的長(zhǎng)度

                      #include <string.h>
                     size_t strlen(const char *s);
                @s : 指向要計(jì)算的那個(gè)字符串的首地址 
                    “const char *” : 表示在函數(shù)調(diào)用過(guò)程中,防止對(duì)s指向的空間里面內(nèi)容進(jìn)行修改。
                    “size_t”: size_t => unsigned int  
                              typede unsigned int size_t  ; 

返回值: 返回字符串s第一個(gè)\0前面的字符的個(gè)數(shù)。

atoi:將十進(jìn)制的數(shù)字字符串,轉(zhuǎn)成整數(shù)值

                 #include <stdlib.h>
               int atoi(const char *nptr);
               long atol(const char *nptr);
               long long atoll(const char *nptr); 

strcpy/strncpy :字符串拷貝函數(shù) 將一個(gè)字符串拷貝到另外一個(gè)字符串上面去。

                 #include <string.h>
                strcpy :用來(lái)把src指向的字符串,拷貝到dest指向的空間中去,直到遇到\0才會(huì)結(jié)束。
               char *strcpy(char *dest, const char *src);
                @dest :  destination 目的地 ,必須是一個(gè)可寫(xiě)的空間
                @src : source 源,從哪里  
                返回值: 返回拷貝后目的地字符串的首地址 

strncpy : 正是為了解決strcpy的這個(gè)bug的(strcpy沒(méi)有考慮到dest指向的空間的大小問(wèn)題)

                    #include <string.h>
                     char *strncpy(char *dest, const char *src, size_t n);
                    strncpy: 把src指向的字符串前面頂多n個(gè)字符拷貝到dest指向的內(nèi)存空間中去。
                        它到底拷貝了多少個(gè)字符呢? 
                            <= n 

                        (1) 遇到\0拷貝結(jié)束,此時(shí)\0也會(huì)被拷貝。
                            char s[10]; 
                            strncpy(s, "12345", 10);    
                        (2) 已經(jīng)拷貝了n個(gè)字符,此時(shí)后面的字符就不會(huì)被拷貝。 
                            char s[10]; 
                            strncpy(s, "0123456789", 10); 

strcmp / strncmp :一個(gè)一個(gè)字符進(jìn)行比較它們對(duì)應(yīng)的ASCII碼

                if c1 > c2 
                    返回1 
                if c1 < c2 
                    返回-1 
                if c1 == c2 
                    則繼續(xù)比較下一個(gè)字符,如果全部相等則返回0 

				   #include <string.h>
				   int strcmp(const char *s1, const char *s2);
				   int strncmp(const char *s1, const char *s2, size_t n);

strcat / strncat 字符串連接函數(shù)

             #include <string.h>
            strcat : 用來(lái)把src指向的字符串拷貝到dest指向的字符串的末尾(尾部連接)
             char *strcat(char *dest, const char *src);
            @dest : 指向目標(biāo)字符串(一段可寫(xiě)的空間) 
                @src : 指向原始字符串 
                返回值:  
                    返回連接后的字符串的首地址(dest指向的首字符地址)

         char *strncat(char *dest, const char *src, size_t n);
            strncat : 把src指向的字符串拷貝到dest末尾,但是它頂多拷貝了n個(gè)字符。
                (1) 遇到\0拷貝結(jié)束,此時(shí)\0也會(huì)被拷貝。 
                (2) 即使沒(méi)有遇到\0,但是已經(jīng)拷貝了n個(gè)字符啦。 

sizeof 求字節(jié)運(yùn)算符

sizeof(x) : 用來(lái)求一個(gè)對(duì)象或類型所占字節(jié)數(shù)的運(yùn)算符,x可以是一個(gè)對(duì)象(變量、指針、數(shù)組、==),也可以是一個(gè)類型。

先求x的類型,然后再求該類型所占的字節(jié)數(shù)

=> typeof(x)

=> sizeof( typeof(x) )

sizeof(指針類型) == 機(jī)器字長(zhǎng)

32bits的機(jī)器 指針?biāo)甲止?jié)數(shù)為4

64bits的機(jī)器 指針?biāo)甲止?jié)數(shù)為8

求數(shù)組的大小

		int a[100];
		sieof(a[0]) == 4 
		sizeof(a[1024]) ==  4  
		sizeof(a) == 
			typeof(a) => int[100]
			sizeof(int[100]) => 4 * 100 
		char *  p[4]; //指針數(shù)組
		sizeof(p[0]) ==  8 
		sizeof(p) == 
			typeof(p) => char* [4] 
			sizeof(char *) * 4 == 8 * 4 
		char (*p)[4];//數(shù)組指針
		sizeof(p)  ==  8 
	int (*p)(int ,int); //函數(shù)指針
		sizeof(p) ==  8 

動(dòng)態(tài)內(nèi)存分配函數(shù)

malloc : 用來(lái)動(dòng)態(tài)分配一個(gè)size大小的內(nèi)存空間,并且把分配到內(nèi)存空間的首地址返回。

malloc分配的空間的生存期,是隨進(jìn)程持續(xù)性。

malloc分配的空間一旦分配給你,他就不會(huì)自動(dòng)去釋放,一定需要你調(diào)用free或你的這個(gè)進(jìn)行消亡了!

        #include <stdlib.h>
        void *malloc(size_t size);
                @size : 要分配的空間的大小(以字節(jié)為單位)
                返回值:  
                    成功返回分配的空間的首地址
                    失敗返回NULL. 
        char * p = (char *)malloc(100); 

free : 用來(lái)釋放ptr指向的內(nèi)存空間的

ptr指向的內(nèi)存空間,必須是malloc/realloc/calloc這三個(gè)函數(shù)分配的內(nèi)存空間。

                void free(void *ptr);
                @ptr : 指向咱們需要釋放的那一塊內(nèi)存的首地址
                    一般為malloc/realloc/calloc這三個(gè)函數(shù)的
                    返回值。 

calloc : 它的作用類似于 malloc ,不過(guò)它是數(shù)組分配函數(shù), 它分配一個(gè)數(shù)組空間,它帶有兩個(gè)參數(shù)。

             void *calloc(size_t nmemb, size_t size);
                @nmemb :  表示分配多少元素 
                @size :  表示每一個(gè)元素占多少字節(jié)
                返回值: 
                    成功返回分配的空間的首地址。
                    失敗返回NULL。

int * a = calloc(10, sizeof(int)); 

realloc : 用來(lái)把ptr(必須是malloc/realloc/calloc這三個(gè)函數(shù)分配的內(nèi)存空間)指向的動(dòng)態(tài)內(nèi)存,擴(kuò)展到size大小。

                void *realloc(void *ptr, size_t size);
                @ptr : 指向咱們需要擴(kuò)展的那一塊內(nèi)存的首地址。
                    一般為malloc/realloc/calloc這三個(gè)函數(shù)的返回值。
                @size : 擴(kuò)展到size大小
                返回值: 
                    成功返回分配的空間的首地址
                    失敗返回NULL。

                1. size > 原來(lái)的大小 
                    realloc用來(lái)把ptr指向的內(nèi)存,擴(kuò)展到size字節(jié),
                    原來(lái)前面的內(nèi)存保持不變,后面新增內(nèi)存內(nèi)容不會(huì)
                    被初始化。
                    (1) 原址擴(kuò)建
                    (2) 整體搬遷 
                    2. size ==  0 
                     realloc(ptr, 0) <=> free(ptr)

main的參數(shù)問(wèn)題

在linux下面,程序運(yùn)行的時(shí)候,可以帶參數(shù),只不過(guò)所有的參數(shù)都當(dāng)作是字符串來(lái)處理的。

			//argc :保存你給main傳參的個(gè)數(shù)
			//argv : 用來(lái)保存?zhèn)鬟f給main的所有參數(shù)的
			//int main(int argc, char * argv[])
			int main(int argc, char ** argv)
			{
			}

到此這篇關(guān)于C語(yǔ)言sizeof與字符串處理與動(dòng)態(tài)內(nèi)存分配及main函數(shù)參數(shù)詳解的文章就介紹到這了,更多相關(guān)C語(yǔ)言sizeof內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語(yǔ)言中指針常量和常量指針的區(qū)別

    C語(yǔ)言中指針常量和常量指針的區(qū)別

    本文主要介紹了C語(yǔ)言中指針常量和常量指針的區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • 簡(jiǎn)單分析C++指針的操作和運(yùn)算

    簡(jiǎn)單分析C++指針的操作和運(yùn)算

    這篇文章主要介紹了簡(jiǎn)單分析C++指針的操作和運(yùn)算的相關(guān)資料,需要的朋友可以參考下
    2015-07-07
  • VScode配置C語(yǔ)言環(huán)境完整版(親測(cè)可用)

    VScode配置C語(yǔ)言環(huán)境完整版(親測(cè)可用)

    這篇文章主要介紹了VScode配置C語(yǔ)言環(huán)境完整版,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-08-08
  • C++設(shè)計(jì)模式之代理模式

    C++設(shè)計(jì)模式之代理模式

    這篇文章主要介紹了C++設(shè)計(jì)模式之代理模式,本文講解了什么是代理模式、代理模式的使用場(chǎng)合、代理模式的實(shí)現(xiàn)代碼等內(nèi)容,需要的朋友可以參考下
    2014-10-10
  • C++ 程序員為什么看不起php程序員

    C++ 程序員為什么看不起php程序員

    由于當(dāng)今市場(chǎng)狀況,各種培訓(xùn)班飛起,PHPer越來(lái)越多,學(xué)習(xí)成本很低。導(dǎo)致了很多人對(duì)PHP的誤解。其實(shí)PHP學(xué)到深入的時(shí)候,所需知識(shí)很多,并不是表面看到的那樣。另外,PHP確實(shí)嚴(yán)謹(jǐn)性不高,這個(gè)跟C++,java確實(shí)都沒(méi)法比。但是,PHP在web開(kāi)發(fā)中的效率,是其他語(yǔ)言所不能比的
    2017-02-02
  • C語(yǔ)言多功能動(dòng)態(tài)通訊錄實(shí)現(xiàn)示例

    C語(yǔ)言多功能動(dòng)態(tài)通訊錄實(shí)現(xiàn)示例

    這篇文章主要為大家介紹了C語(yǔ)言多功能動(dòng)態(tài)通訊錄實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • 簡(jiǎn)單聊聊C++中線程的原理與實(shí)現(xiàn)

    簡(jiǎn)單聊聊C++中線程的原理與實(shí)現(xiàn)

    C++11?引入了多線程支持,提供了一套基本的線程庫(kù),包括線程、互斥量(mutex)、條件變量(condition_variable)等。這些組件可以幫助你在?C++?程序中實(shí)現(xiàn)并發(fā)和多線程編程,本文就來(lái)和大家簡(jiǎn)單聊聊吧
    2023-03-03
  • C語(yǔ)言實(shí)現(xiàn)自動(dòng)發(fā)牌程序

    C語(yǔ)言實(shí)現(xiàn)自動(dòng)發(fā)牌程序

    這篇文章主要介紹了利用C語(yǔ)言實(shí)現(xiàn)自動(dòng)發(fā)牌程序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • c++ 對(duì)數(shù)器實(shí)現(xiàn)示例

    c++ 對(duì)數(shù)器實(shí)現(xiàn)示例

    對(duì)數(shù)器用于在自己的本地平臺(tái)驗(yàn)證算法正確性,本文詳細(xì)的介紹了c++ 對(duì)數(shù)器實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • C++ Boost Heap使用實(shí)例詳解

    C++ Boost Heap使用實(shí)例詳解

    Boost是為C++語(yǔ)言標(biāo)準(zhǔn)庫(kù)提供擴(kuò)展的一些C++程序庫(kù)的總稱。Boost庫(kù)是一個(gè)可移植、提供源代碼的C++庫(kù),作為標(biāo)準(zhǔn)庫(kù)的后備,是C++標(biāo)準(zhǔn)化進(jìn)程的開(kāi)發(fā)引擎之一,是為C++語(yǔ)言標(biāo)準(zhǔn)庫(kù)提供擴(kuò)展的一些C++程序庫(kù)的總稱
    2022-11-11

最新評(píng)論

蚌埠市| 京山县| 清流县| 安塞县| 宾川县| 安福县| 迭部县| 都昌县| 泸西县| 阳泉市| 重庆市| 安阳县| 孝感市| 冷水江市| 绥宁县| 泸定县| 京山县| 宜君县| 慈利县| 马尔康县| 区。| 井研县| 垫江县| 治县。| 弥渡县| 晴隆县| 抚州市| 泉州市| 海城市| 华池县| 文安县| 遂平县| 漠河县| 苏尼特右旗| 开阳县| 宣恩县| 兰考县| 商都县| 武穴市| 沐川县| 林芝县|