欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語言中static與sizeof查缺補漏篇

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

前言

最近學習遇到了很多小難題,今天這篇博客就來記錄一下最近學習所遇到的一些困惑我的地方,以便于復習。

一、關于關鍵字static

在C語言中:

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

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

下面我們用代碼來解釋一下static在c語言中的應用

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)局部變量出了作用域依然存在,到程序結束,生命周期才結束。 簡單來說就是static把原本在棧區(qū)上的局部變量挪到了靜態(tài)區(qū),即 可以使變量出了作用域之后不銷毀。

2.static修飾全局變量

在這里我們需要在一個工程里面開辟2個.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);//會報錯
    return 0; }

代碼一:輸出 2018

代碼二:在編譯的時候會出現(xiàn)連接性錯誤

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

3.static修飾函數(shù)

我們也需要在一個工程內開辟2個.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));//報錯
    return 0;
}

代碼一:輸出 5

代碼二:在編譯的時候會出現(xiàn)連接性錯誤

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

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

我們首先必須知道sizeof是關鍵字?。?/p>

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

1.sizeof

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

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

2.strlen

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

二者區(qū)別

二者計算指針長度

眾所周知字符串數(shù)組后面會默認有 ‘\0’ ,下面我們用代碼來看看二者的區(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’ 時會將 ‘\0’ 算入

strlen從第一個地址開始遍歷,遇到 ‘\0’ (NULL)會立刻返回,但是返回的長度并不包括 ‘\0’

因此 sizeof在字符串數(shù)組內返回的長度總是比strlen多一個

下面我們用代碼來解釋sizeof和stlen的不同

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

三、關于if()內部>與<的正確使用

首先我們來看一道題目

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

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

但是怎樣才會打印出我們想要的結果呢?看下面的代碼

當我們用 ==&&==這個符號連接時,if語句里面的意思就是 字符’c‘<‘m’ 且字符’c‘>'m’是打印yes,這就是我們想要的結果了。

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

相關文章

  • 深入淺析C++ traits技術

    深入淺析C++ traits技術

    traits就是提取“被傳進的對象”對應的返回類型,讓同一個接口實現(xiàn)對應的功能。因為STL的算法和容器是分離的,兩者通過迭代器鏈接,本文通過實例代碼給大家介紹C++ traits技術,感興趣的朋友一起看看吧
    2021-05-05
  • C語言超詳細文件操作基礎下篇

    C語言超詳細文件操作基礎下篇

    這篇文章主要為大家詳細介紹了C語言的文件操作,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • C語言中的結構體的入門學習教程

    C語言中的結構體的入門學習教程

    這篇文章主要介紹了C語言中的結構體的入門學習教程,以struct語句定義的結構體是C語言編程中的重要基礎,需要的朋友可以參考下
    2015-12-12
  • c++中new和delete操作符用法

    c++中new和delete操作符用法

    c++中new和delete運算符是用于動態(tài)分配和撤銷內存的運算符,下面是示例,大家參考使用吧
    2014-04-04
  • 用C語言舉例講解數(shù)據(jù)結構中的算法復雜度結與順序表

    用C語言舉例講解數(shù)據(jù)結構中的算法復雜度結與順序表

    這篇文章主要介紹了講解數(shù)據(jù)結構中的算法復雜度結與順序表的C語言版示例,包括對時間復雜度和空間復雜度等概念的簡單講解,需要的朋友可以參考下
    2016-02-02
  • 判斷本機office安裝版本的方法分享

    判斷本機office安裝版本的方法分享

    這篇文章主要介紹了判斷本機office安裝版本的方法分享,需要的朋友可以參考下
    2014-01-01
  • C++實現(xiàn)LeetCode(10.正則表達式匹配)

    C++實現(xiàn)LeetCode(10.正則表達式匹配)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(10.正則表達式匹配),本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-07-07
  • C++簡單五子棋的AI設計實現(xiàn)

    C++簡單五子棋的AI設計實現(xiàn)

    這篇文章主要為大家詳細介紹了C++簡單五子棋的AI設計實現(xiàn),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-09-09
  • C/C++的關鍵字之static你了解嗎

    C/C++的關鍵字之static你了解嗎

    這篇文章主要為大家詳細介紹了C/C++的關鍵字之static,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • 一篇文章帶你了解C++中的異常

    一篇文章帶你了解C++中的異常

    這篇文章主要為大家詳細介紹了C++中的異常,使用數(shù)據(jù)庫,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02

最新評論