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

深入分析C語言存儲類型與用戶空間內(nèi)部分布

 更新時間:2022年12月26日 15:21:00   作者:編程遠泊  
這篇文章主要介紹了C語言存儲類型與用戶空間內(nèi)部分布,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧

1、定義變量的格式

存儲類型 數(shù)據(jù)類型 變量名 = 初始值;

2、6個存儲類型

自動存儲區(qū):auto register

非自動存儲區(qū):const static extern volatile

3、auto存儲類型-自動存儲類型

自動類型:局部變量屬于自動類型,定義局部變量時,加auto或者不加auto都是一樣的,一般省略auto.

非自動類型:全局變量,使用static修飾的全局變量或者局部變量不可以使用auto進行修飾。

#include <stdio.h>
int s;  // 全局變量,屬于非自動類型,不可以使用auto修飾
// auto int k;  // error
static int x; // 使用static修飾的靜態(tài)全局變量,屬于非自動類型,不可以使用auto修飾
// auto static int x;   // error
int main(int argc, const char *argv[])
{
    /*your code*/
    int i;   // 自動類型變量,省略auto
    auto int j;  // 自動類型變量,使用auto修飾
    static int m;  //  使用static修飾的靜態(tài)局部變量,屬于非自動類型,不可以使用auto修飾
    // auto static int n;  // error
    return 0;
}

4、register存儲類型-寄存器存儲類型

定義寄存器存儲類型的變量,定義的變量分配一個寄存器的空間給變量使用。

盡量不要定義寄存器類型的變量,在CPU中寄存器的數(shù)量有限(空間有限)

寄存器變量不可以進行去地址取運算(&),原因是寄存器沒有地址。

5、const存儲類型-常量存儲類型

1.只讀,初始化后不能修改;

2.使代碼更緊湊;

3.編譯器自然保護不希望改變的參數(shù),防止無意修改代碼

(例:const int * p=&a ,表示*p不能改變a的值

? int const * p=&a ,表示*p不能改變a的值

? int * const p=&a ,表示p指向的地址不能改變

? const int * const p=&a ,表示既不能改變指向的地址,又不能改變指向地址中的值)

6、static-靜態(tài)存儲類型

1.static修飾局部變量:延長生命周期到整個進程結(jié)束,

? 只在第一次調(diào)用此函數(shù)時,對靜態(tài)局部變量進行初始化,后面在此調(diào)用函數(shù),不在初始化

? 如果定義的靜態(tài)局部變量沒有進行初始化,默認初始化為0

2.static修飾全局變量:外部文件不可以使用,靜態(tài)全局變量的作用域在本文件內(nèi)。

3.static修飾函數(shù):外部文件不可以使用,靜態(tài)全局變量的作用域在本文件內(nèi)。

7、extern-修飾全局變量

1.externa修飾全局變量,表示這個全局變量在其他文件中定義的

2.externa修飾函數(shù),表示這個函數(shù)是在其他文件中定義的

3.聲明一個變量,extern聲明的變量沒有建立存儲空間。int a;//變量在定義的時候創(chuàng)建存儲空間

8、volatile-易變存儲類型

volatile關(guān)鍵字用來阻止編譯器認為的無法“被代碼本身”改變的代碼進行優(yōu)化。

如在C語言中,volatile關(guān)鍵字可以用來提醒編譯器它后面所定義的變量隨時有可能改變,

因此編譯后的程序每次需要存儲或讀取這個變量的時候,都會直接從變量地址中讀取數(shù)據(jù)。

如果沒有volatile關(guān)鍵字,則編譯器可能優(yōu)化讀取和存儲,可能暫時使用寄存器中的值,

如果這個變量由別的程序更新了的話,將出現(xiàn)不一致的現(xiàn)象。

在java并發(fā)編程中,volatile的作用

對于可見性,java提供了volatile關(guān)鍵字來保證可見性。

當一個共享的變量被volatile修飾時,它會保證修改的值會立即被更新到主存當中,當其他線程需要讀取時,

它會去內(nèi)存中讀取新值。

9、用戶空間內(nèi)部分布圖

代碼解析:

#include <stdio.h>
int d; // 全局變量未初始化 值為0 .bss
int e=10; //全局變量初始化 .data
char *p = "hello"; //字符指針 p在.data "hello"在.rodata
char arr[] = "world"; //.字符數(shù)組 .data
static int f; //使用static修飾的未初始化的全局變量 值為0 .bss
static int g=20; //使用static修飾的初始化的全局變量 .data
int main(int argc, const char *argv[])
{
     int a=10; //局部變量初始化 棧區(qū)
     int b; //局部變量未初始化,隨機值 棧區(qū)
     static int c; //使用static修飾的局部變量 未初始化 值為0 .bss
     static int d=20; //使用static修飾的局部變量初始化  .data
     char *p = "hello"; //字符指針 p:在棧區(qū) “hello”在 .rodata
     char arr[] = "world"; //字符數(shù)組 棧
     char *q = malloc(10); //q在棧區(qū),指向堆區(qū)的10字節(jié)的?地址
     return 0;
}

到此這篇關(guān)于深入分析C語言存儲類型與用戶空間內(nèi)部分布的文章就介紹到這了,更多相關(guān)C語言存儲類型內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 淺析C++中dynamic_cast和static_cast實例語法詳解

    淺析C++中dynamic_cast和static_cast實例語法詳解

    這篇文章主要介紹了淺析C++中dynamic_cast和static_cast實例演示,包括static_cast語法知識和static_cast的作用講解,namic_cast 語法詳解,需要的朋友可以參考下
    2021-07-07
  • C++中的對象數(shù)組詳細解析

    C++中的對象數(shù)組詳細解析

    在建立數(shù)組時,同樣要調(diào)用構(gòu)造函數(shù)。如果有50個元素,就需要調(diào)用50次構(gòu)造函數(shù)。在需要的時候,可以在定義數(shù)組時提供實參以實現(xiàn)初始化
    2013-10-10
  • Windows注冊表中修改UAC(用戶賬號控制)及批處理腳本

    Windows注冊表中修改UAC(用戶賬號控制)及批處理腳本

    今天小編就為大家分享一篇關(guān)于Windows注冊表中修改UAC(用戶賬號控制)及批處理腳本,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • C語言中qsort函數(shù)的介紹與用法實例

    C語言中qsort函數(shù)的介紹與用法實例

    C語言的標準庫提供了一個重要的排序函數(shù)qsort給C語言使用者使用,qsort函數(shù)將快速排序的算法封裝起來,這篇文章主要給大家介紹了關(guān)于C語言中qsort函數(shù)的介紹與用法的相關(guān)資料,需要的朋友可以參考下
    2021-09-09
  • C++中priority_queue模擬實現(xiàn)的代碼示例

    C++中priority_queue模擬實現(xiàn)的代碼示例

    在c++語言中數(shù)據(jù)結(jié)構(gòu)中的堆結(jié)構(gòu)可以通過STL庫中的priority_queue 優(yōu)先隊列來實現(xiàn),這樣做極大地簡化了我們的工作量,這篇文章主要給大家介紹了關(guān)于C++中priority_queue模擬實現(xiàn)的相關(guān)資料,需要的朋友可以參考下
    2021-08-08
  • 深入C++浮點數(shù)無效值定義與判定的解決辦法

    深入C++浮點數(shù)無效值定義與判定的解決辦法

    本篇文章是對C++中浮點數(shù)無效值定義與判定進行了介紹,需要的朋友參考下
    2013-05-05
  • 數(shù)據(jù)結(jié)構(gòu) 雙向鏈表的創(chuàng)建和讀取詳解及實例代碼

    數(shù)據(jù)結(jié)構(gòu) 雙向鏈表的創(chuàng)建和讀取詳解及實例代碼

    這篇文章主要介紹了數(shù)據(jù)結(jié)構(gòu) 雙向鏈表的創(chuàng)建和讀取詳解及實例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • C語言計算余數(shù)的圖文步驟

    C語言計算余數(shù)的圖文步驟

    在本篇文章里小編給大家整理了一篇關(guān)于C語言計算余數(shù)的圖文步驟內(nèi)容,有需要的朋友們可以參考下。
    2020-02-02
  • Qt使用Matlab函數(shù)的詳細步驟

    Qt使用Matlab函數(shù)的詳細步驟

    由于項目需要,需要調(diào)用現(xiàn)有的matlab程序,下面這篇文章主要給大家介紹了關(guān)于Qt使用Matlab函數(shù)的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-01-01
  • C++中 STL list詳解及簡單實例

    C++中 STL list詳解及簡單實例

    這篇文章主要介紹了C++中 STL list詳解及簡單實例的相關(guān)資料,需要的朋友可以參考下
    2017-04-04

最新評論