1. 程式人生 > >C語言資料型別的修飾符

C語言資料型別的修飾符

概述:C語言操作物件是記憶體資源,對記憶體資源存放位置的限定
變數:在程式執行過程中其數值可以改變的資料
定義的一般形式:
儲存型別:資料型別變數名;
儲存型別:決定了變數的儲存位置
資料型別:決定了變數的儲存大小
1、auto自動變數,位於普通記憶體,可讀可寫區域。預設情況下使用的是auto,如果變數在{}中,則變數存放於棧空間。
2、register
int a; ==》可讀可寫的記憶體上
register int a; 限制變數定義在暫存器上的修飾符用於定義一些快速訪問的變數
實際上是中看不中用的修飾符,編譯器會盡量的安排CPU的暫存器去存放a,如果暫存器不足時,那麼a還是放在儲存器中(記憶體)
記憶體(儲存器)與 暫存器的關聯:
微軟推出一些不同的CPU,頻率一樣,價格差異很大,基本上都是和內部暫存器的數量有關,隨著內部暫存器數量的增加,執行速度大幅提升,其成本相對也提高了很多。
記憶體是有地址的,暫存器是沒有地址的,因此,取地址符&對register變數是非法的

(即使最後使用的不是暫存器)
3、static
靜態變數==》存放於靜態區的變數
應用場景:
(1) 函式內部的變數
int fun()
{
int a; ==》 static int a; a存放於資料段,全域性存在,區域性可見
}
(2)全域性變數(函式外部的變數)
int a; ==》static int a; a存放於資料段,全域性存在,全域性可見
int fun()
{
……
}
(3)函式的修飾符
int fun() ==》static int fun()
題外:
int main()
{
printf(“the address of main is %d\n”,main);
}
編譯會報型別不匹配的警告,但是編譯能過,main的地址能列印,這說明main是一種型別,可以用型別修飾符修飾的
4、extern
外部宣告
5、const 常量的定義
const int a = 100; 只讀的變數,但是還是有辦法去改變(指標技巧)
假定記憶體中有兩塊區域,一塊的屬性是WR,一塊的屬性是R,則R屬性區域的記憶體裡存放的內容是不能修改的,但是const修飾的變數存放的區域屬性是WR而不是R,其不可修改的屬性是由編譯器去控制的,而不是記憶體的屬性
6、volatile
告知編譯器編譯方法的關鍵字,不優化編譯
告知編譯器:被修飾變數的值的修改,不僅僅可以通過軟體,也可以通過其它方式(硬體修改)
舉例:
int a = 100;
while(a == 100);
myfun();
==》彙編程式碼:
F1: LDR R0 , [a] [a]代表a的地址,將a的值從記憶體送到R0暫存器
F2:CMP R0, #100
F3:JMPEQ F1 編譯器開啟優化後 JMPEQ : F2

F4:myfun()
由於在while迴圈中沒有對a操作,因此編譯器會認為記憶體中的變數a不會發生變化,因此會有優化,不會去記憶體中讀取a的值與R0作比較。

相關推薦

C語言型別修飾

auto 預設修飾符 register: register int a;  //限制變數定義在暫存器上的修飾符 用於定義一些快速訪問的變數 編譯器會盡量的安排CPU的暫存器去存放這個a,如果暫存器不足時,a還是放在儲存器中 取地址符&對register不起作

C語言資料型別修飾

概述:C語言操作物件是記憶體資源,對記憶體資源存放位置的限定 變數:在程式執行過程中其數值可以改變的資料 定義的一般形式: 儲存型別:資料型別變數名; 儲存型別:決定了變數的儲存位置 資料型別:決定了變數的儲存大小

C語言儲存類修飾型別限定

儲存類修飾符 宣告中出現的儲存類修飾符(storage class specifier)用於修改識別符號的連結和對應物件的儲存週

C語言 資料型別輸入輸出函式(2018.11.17)

基本資料型別 5個方式瞭解基本型別 1、符號 2、位元組數 3、資料範圍 4、表示方法 5、運算方法 記憶體空間分配給變數,不是型別 指標型別:指標變臉中只能存放地址 空型別:主要用於資料型別的轉換和定義函式型別 void指標是萬用指標,萬用=無用,多數用於型別轉換後使用 限定性流程

C語言資料型別,運算子與表示式

1.C語言的關鍵字 32個關鍵字: auto:自動宣告      break:跳出當前迴圈      case:開關語句分支               &nbs

一、學習筆記,C語言資料型別

目錄 資料型別 基本資料型別 資料型別 基本資料型別 bool型別 使用bool型別 需要引入<stdbool.h> 型別bool的值域 型別名

4. C語言 -- 資料型別和取值範圍

本部落格主要內容為 “小甲魚” 視訊課程《帶你學C帶你飛》【第一季】 學習筆記,文章的主題內容均來自該課程,在這裡僅作學習交流。在文章中可能出現一些錯誤或者不準確的地方,如發現請積極指出,十分感謝。 也歡迎大家一起討論交流,如果你覺得這篇文章對你有所幫助,記得

C語言資料型別表示式相關知識(Linux)

#include<stdio.h> int main(int argc,char**argv) { printf(“Hello Word\n"); printf(“argv[%d],%s\n”,i,argv[i]); return 0; } 計算

C語言資料型別深度探測

C語言中的資料型別: 基本型別 – 整數型別 – 浮點型別 構造型別 – 陣列型別 – 結構體型別 – 共用體(聯合)型別 指標型別 空型別(void)

C語言資料型別

整形 Name Description Size* Range*signed: Range*unsigned: char Character or small integer. 1byte -128 to 127

有關c語言資料型別轉換之char,unsigned char,unsigned short

這是一道朗訊的筆試題(我把一些相關資料彙總了一下,希望大家能進來廣泛的探討,不甚感激!) #include <stdio.h> int main() {     char  ca;     unsigned char ucb;     unsigned shor

C語言------資料型別

C語言的資料型別有很多,為了突出主線,避免初學者一開始就因為接觸太多的資料型別陷入到繁瑣的語法當中,這裡只介紹整型和實數型。C語言程式處理的資料有常量和變數兩種形式。常量    在程式中不能改變的量。按著型別分為:整型常量(包括0在內)、實型常量、字元常量、字串常量、列舉常量

c語言資料型別與儲存

資料型別C語言中一般有以下常用的資料型別型別所佔位元組數取值範圍(unsigned取值範圍(signed)格式化輸出整形(int)2 or 4 16位機器是2,32位機器和64位機器是4 目前主流編譯器都是4位0~2^32-1-2^31~2^31-1%d短整形(short i

C語言資料型別儲存位置及堆疊說明

一、預備知識—程式的記憶體分配一個由C/C++編譯的程式佔用的記憶體分為以下幾個部分1、棧區(stack)  由編譯器自動分配釋放 ,存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧。2、堆區(heap)   般由程式設計師分配釋放, 若程式設計師不釋放

c語言資料型別、運算子和表示式

資料型別   1.基本資料型別: 基本資料型別最主要的特點是,其值不可以分解為其他型別。也就是說,基本資料型別是 自我說明的 2.構造資料型別: 構造資料型別是根據已定於的一個或多個數據型別用構造的方法來定義的。也就是說, 一個構造型別的值可以分解為若干個“成員”或“元素

C語言資料型別佔用位元組大小

在昨天的筆試的時候碰到了一個關於不同的資料型別佔用位元組大小的問題,於是就想歸納整理一下關於這方面的問題。於是就寫了一下,在Linux系統下用gcc編譯驗證了一下,以供參考。16位編譯器:char/unsigned char :1位元組char *:2位元組short int

C 語言資料型別意義解析

先給出一張書上關於資料型別的分類圖,其中對於指標型別和空型別做了不同的分類,具體原因請看下面的說明 關於C中的資料型別,個人的劃分方法是 分為兩類,一類是基本型別(地址型別也是基本型別的一種),

32位,64位編譯器下c語言資料型別對應位元組數

一、程式執行平臺         不同的平臺上對不同資料型別分配的位元組數是不同的。         個人對平臺的理解是CPU+OS+Compiler,是因為:         1、64位機器也可以裝32位系統(x64裝XP);         2、32位機器上可以有16

C語言資料型別所佔位元組數

char :1個位元組 unsigned char :1個位元組 char*(即指標變數): 4個位元組(32位的定址空間是2^32, 即32個bit,也就是4個位元組。同理64位編譯器) short : 2個位元組 unsigned short : 2個位元組 int:  4個位元組 unsigned in

c語言資料型別對應位元組數(32位,64位 int 佔位元組數)

一、程式執行平臺         不同的平臺上對不同資料型別分配的位元組數是不同的。         個人對平臺的理解是CPU+OS+Compiler,是因為:         1、64位機器也可以裝32位系統(x64裝XP);         2、32位機器上可以