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

C語(yǔ)言中static與sizeof查缺補(bǔ)漏篇

 更新時(shí)間:2022年07月08日 10:24:11   作者:hania_w  
static在修飾變量的時(shí)候,如果是修飾全局變量,則跟全局變量功能一樣;如果是修改局部變量,則每次調(diào)用的時(shí)候,保持著上一次的值;而sizeof是用來(lái)判斷一個(gè)變量及數(shù)據(jù)類型所占字節(jié)數(shù)的,下面我們?cè)敿?xì)來(lái)看看

前言

最近學(xué)習(xí)遇到了很多小難題,今天這篇博客就來(lái)記錄一下最近學(xué)習(xí)所遇到的一些困惑我的地方,以便于復(fù)習(xí)。

一、關(guān)于關(guān)鍵字static

在C語(yǔ)言中:

static是用來(lái)修飾變量和函數(shù)的

  • 修飾局部變量-稱為靜態(tài)局部變量
  • 修飾全局變量-稱為靜態(tài)全局變量
  • 修飾函數(shù)-稱為靜態(tài)函數(shù)

下面我們用代碼來(lái)解釋一下static在c語(yǔ)言中的應(yīng)用

1.static修飾局部變量

//第一組代碼
#include <stdio.h>
void test()
{
    int i = 0;
    i++;
    printf("%d ", i);//1 1 1 1 1 1 1 1 1 1 
}
int main()
{
 int i = 0;
    for(i=0; i<10; i++)
   {
        test();
   }
    return 0;
}
//第二組代碼
#include <stdio.h>
void test()
{
    //static修飾局部變量
    static int i = 0;
    i++;
    printf("%d ", i);//1 2 3 4 5 6 7 8 9 10
}
int main()
{
	int i = 0;
	    for(i=0; i<10; i++)
	   {
	        test();
	   }
	    return 0;
}

代碼一:輸出為 1 1 1 1 1 1 1 1 1 1

代碼二:輸出為 1 2 3 4 5 6 7 8 9 10

所以static修飾局部變量改變了變量的生命周期,讓靜態(tài)局部變量出了作用域依然存在,到程序結(jié)束,生命周期才結(jié)束。 簡(jiǎn)單來(lái)說(shuō)就是static把原本在棧區(qū)上的局部變量挪到了靜態(tài)區(qū),即 可以使變量出了作用域之后不銷毀。

2.static修飾全局變量

在這里我們需要在一個(gè)工程里面開(kāi)辟2個(gè).c文件,方便我們更清晰的看出static的作用

//代碼一
       //add.c
int g_val = 2018;
       //test.c
int main()
{
    printf("%d\n", g_val);//2018
    return 0;
}
//代碼2
         //add.c
static int g_val = 2018;
         //test.c
int main()
{
    printf("%d\n", g_val);//會(huì)報(bào)錯(cuò)
    return 0; }

代碼一:輸出 2018

代碼二:在編譯的時(shí)候會(huì)出現(xiàn)連接性錯(cuò)誤

所以我們可以得出結(jié)論 :一個(gè)全局變量被static修飾,使得這個(gè)全局變量只能在本源文件內(nèi)使用,不能在其他源文件內(nèi)使用。

3.static修飾函數(shù)

我們也需要在一個(gè)工程內(nèi)開(kāi)辟2個(gè).c文件方便我們觀察

//代碼1
     //add.c
int Add(int x, int y)
{
    return x+y;
}
     //test.c
int main()
{
    printf("%d\n", Add(2, 3));//  5
    return 0;
}
//代碼2
      //add.c
static int Add(int x, int y)
{
    return c+y; 
}
      //test.c
int main()
{
    printf("%d\n", Add(2, 3));//報(bào)錯(cuò)
    return 0;
}

代碼一:輸出 5

代碼二:在編譯的時(shí)候會(huì)出現(xiàn)連接性錯(cuò)誤

所以一個(gè)函數(shù)被static修飾,使得這個(gè)函數(shù)只能在本源文件內(nèi)使用,不能在其他源文件內(nèi)使用。

二、sizeof和strlen的區(qū)別

我們首先必須知道sizeof是關(guān)鍵字??!

strlen是函數(shù)?。?兩者有著質(zhì)的區(qū)別

1.sizeof

在c語(yǔ)言中,sizeof在頭文件中的類型為unsigned int ,

他的參數(shù)可以是指針、數(shù)組、類型、對(duì)象、函數(shù)等等

2.strlen

在c語(yǔ)言中,strlen()是函數(shù),所以在使用它的時(shí)候,就有對(duì)應(yīng)的頭文件 <string.h> ,他和sizeof在參數(shù)上不同的是,strlen的參數(shù)只有字符型指針。

二者區(qū)別

二者計(jì)算指針長(zhǎng)度

眾所周知字符串?dāng)?shù)組后面會(huì)默認(rèn)有 ‘\0’ ,下面我們用代碼來(lái)看看二者的區(qū)別

#include<stdio.h>
#include<string.h>
int main()
{
	char arr[] = { "abcd" };
	printf("%d\n", sizeof(arr));//   5
	printf("%d\n", strlen(arr));//   4
	return 0;
}

sizeof遇到 ‘\0’ 時(shí)會(huì)將 ‘\0’ 算入

strlen從第一個(gè)地址開(kāi)始遍歷,遇到 ‘\0’ (NULL)會(huì)立刻返回,但是返回的長(zhǎng)度并不包括 ‘\0’

因此 sizeof在字符串?dāng)?shù)組內(nèi)返回的長(zhǎng)度總是比strlen多一個(gè)

下面我們用代碼來(lái)解釋sizeof和stlen的不同

#include<stdio.h>
#include<string.h>
int main()
{
	char arr[] = { 'a','b','c','d'};
	printf("%d\n", sizeof(arr));//   4
//一個(gè)字符在內(nèi)存中占一個(gè)字節(jié),4個(gè)字符就占4個(gè)字節(jié),所以輸出4
	printf("%d\n", strlen(arr));//   15
//因?yàn)樽址麛?shù)組并不會(huì)默認(rèn)字符最后有'\0',所以編譯器就會(huì)一直往后找,直到找到'\0'
//但是此時(shí)'\0'是隨機(jī)的,這取決于編譯器,如果在其他編譯器內(nèi)運(yùn)行 打印的結(jié)果可能就是其他大于4的隨機(jī)數(shù),下面我有貼圖片
    char arr1[]={'a','b','c','d','\0'};	
    printf("%d\n", strlen(arr1));//  4
	return 0;
}

三、關(guān)于if()內(nèi)部>與<的正確使用

首先我們來(lái)看一道題目

我相信大家剛開(kāi)始看到這道題目的時(shí)候一定和我一樣不理解,字符 ‘c’ 不是比字符 ‘m’ 小嗎,這樣打印出來(lái)的不應(yīng)該是no嗎,可是為什么打印出來(lái)的是yes呢?

我們是這樣解釋的:在c語(yǔ)言中,編譯器都是從左到右依次判斷,因此編譯器會(huì)先判斷字符 ‘c’ 是否比字符 ‘m’ 大,顯而易見(jiàn)是假的,因此前面就變成了0,表示假,然后就會(huì)判斷0是否比字符 ==‘z’==小,顯而易見(jiàn) 0比 ==‘z‘==小,因此if語(yǔ)句里面的就是真的,所以我們會(huì)打印出 yes。

但是怎樣才會(huì)打印出我們想要的結(jié)果呢?看下面的代碼

當(dāng)我們用 ==&&==這個(gè)符號(hào)連接時(shí),if語(yǔ)句里面的意思就是 字符’c‘<‘m’ 且字符’c‘>'m’是打印yes,這就是我們想要的結(jié)果了。

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

相關(guān)文章

  • C語(yǔ)言 設(shè)計(jì)模式之訪問(wèn)者模式

    C語(yǔ)言 設(shè)計(jì)模式之訪問(wèn)者模式

    這篇文章主要介紹了C語(yǔ)言 設(shè)計(jì)模式之訪問(wèn)者模式的相關(guān)資料,需要的朋友可以參考下
    2017-01-01
  • C語(yǔ)言基于單鏈表實(shí)現(xiàn)通訊錄功能

    C語(yǔ)言基于單鏈表實(shí)現(xiàn)通訊錄功能

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言基于單鏈表實(shí)現(xiàn)通訊錄功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • 使用Qt框架制作一個(gè)表白程序

    使用Qt框架制作一個(gè)表白程序

    這篇文章主要為大家詳細(xì)介紹了如何使用Qt框架制作一個(gè)表白程序,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,有需要的小伙伴可以參考一下
    2024-01-01
  • C/C++ INI文件操作實(shí)現(xiàn)代碼

    C/C++ INI文件操作實(shí)現(xiàn)代碼

    本文章主要為分享C/C++ INI文件操作實(shí)現(xiàn)代碼,增加注釋和修復(fù)了一些問(wèn)題。這里給出完整的實(shí)現(xiàn)文件,在需要的地方包含該頭文件就好了
    2020-02-02
  • C語(yǔ)言中你容易忽略的知識(shí)點(diǎn)與技巧總結(jié)

    C語(yǔ)言中你容易忽略的知識(shí)點(diǎn)與技巧總結(jié)

    這篇文章主要給大家介紹了關(guān)于C語(yǔ)言中你容易忽略的知識(shí)點(diǎn)與技巧,文中通過(guò)實(shí)例代碼以及圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2022-03-03
  • 簡(jiǎn)要對(duì)比C語(yǔ)言中的setgid()函數(shù)和setregid()函數(shù)

    簡(jiǎn)要對(duì)比C語(yǔ)言中的setgid()函數(shù)和setregid()函數(shù)

    這篇文章主要介紹了C語(yǔ)言中的setgid()函數(shù)和setregid()函數(shù)的簡(jiǎn)要對(duì)比,是C語(yǔ)言入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-08-08
  • C++ 三種繼承方式及好處示例詳解

    C++ 三種繼承方式及好處示例詳解

    這篇文章主要為大家介紹了C++ 三種繼承方式及好處示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • 全面了解C語(yǔ)言?static?關(guān)鍵字

    全面了解C語(yǔ)言?static?關(guān)鍵字

    這篇文章主要介紹了全面了解C語(yǔ)言?static?關(guān)鍵字,文章首先通過(guò)先介紹一下頭文件的創(chuàng)建展開(kāi)主題的詳細(xì)內(nèi)容,需要的小伙伴可以參考一下
    2022-04-04
  • C++11/14的新特性(更簡(jiǎn)潔)

    C++11/14的新特性(更簡(jiǎn)潔)

    這篇文章主要介紹了C++11/14的新特性(更簡(jiǎn)潔),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-01-01
  • 手把手教你實(shí)現(xiàn)漂亮的Qt?登錄界面

    手把手教你實(shí)現(xiàn)漂亮的Qt?登錄界面

    最近在使用Qt5,Qt?Creator做一個(gè)管理系統(tǒng)類的項(xiàng)目,需要用到登錄界面,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11

最新評(píng)論

本溪| 锡林郭勒盟| 永济市| 津南区| 邮箱| 昌都县| 嘉荫县| 应用必备| 周宁县| 玉田县| 应城市| 白水县| 古田县| 耒阳市| 拉萨市| 庆元县| 连州市| 金堂县| 浮山县| 讷河市| 米易县| 黑水县| 甘肃省| 石狮市| 武汉市| 卫辉市| 罗源县| 永嘉县| 武鸣县| 莱芜市| 定南县| 黑龙江省| 安吉县| 山西省| 台东市| 盐池县| 广河县| 连山| 武定县| 琼海市| 乐平市|