變量屬性

變量屬性

C語言的變量屬性

  • C語言中的變量可以有自己的屬性
  • 在定義變量的時候加上“屬性”關鍵字
  • 屬性關鍵字指明變量的特有意義

auto關鍵字

  • auto即C語言中局部變量的默認屬性
  • auto表明將被修飾的變量存儲在棧上
  • 編譯器默認所有的局部變量都是auto的

register關鍵字

  • register關鍵字指明局部變量存儲在寄存器中
  • register只是請求寄存器變量,但不一定請求成功
  • register變量的必須是CPU寄存器可以接受的值
  • 不能用&運算符獲取register變量的地址
#include <stdio.h>
register int g_val ; // error
int main()
{register char var;printf("0x%08x",&var); // errorreturn 0;
}

static關鍵字

  • static關鍵字指明變量的“靜態”屬性
  • static關鍵同時具有“作用域限定符”的意義
    • static修飾的全局變量作用域只是聲明的文件中
    • static修飾的函數作用域只是聲明的文件中
#include <stdio.h>
int g_var; // 全局變量,程序的任意地方都能訪問
static int g_vs; // 靜態全局變量,只有當前文件中可以訪問
int main()
{int var;  // 局部變量,在棧上分配空間static int s_var; // 靜態局部變量,在靜態數據區分配空間return 0;
}

例子:

#include <stdio.h>
int f1()
{int r = 0;r++;return r;
}
int f2()
{static int r = 0;r++;return r;
}
int main(int argc, char const *argv[])
{auto int i = 0;static int k = 0;register int j = 0;printf("%p\n",&i);printf("%p\n",&k);// printf("%p\n",&j); // errorfor(i=0;i<5;i++)printf("%d\n",f1());for(i=0;i<5;i++)printf("%d\n",f2());return 0;
}

結果:
1020750-20161114113348404-691148863.png

extern 關鍵字

  • extern 用于聲明“外部”定義的變量和函數
    • extern 變量在文件的其他地方分配空間
    • extern 函數在文件的其他地方定義
  • extern 用于“告訴”編譯器用C語言方式編譯
extern "C"
{int f(int a,int b){return a + b;}
}

static 和extern

#include <stdio.h>
extern int g_i;
int main()
{printf("%d\n",g_i);
}
int g_i;

總結:

  • auto變量存儲在程序的棧中,默認屬性
  • static 變量在程序靜態區中
  • register變量請求存儲于CPU寄存器中
  • extern變量在文件的其它地方分配空間
  • extern 能夠指示編譯器按照標準C方式編譯程序

轉載于:https://www.cnblogs.com/yanyun888/p/6061235.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/253994.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/253994.shtml
英文地址,請注明出處:http://en.pswp.cn/news/253994.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

WPF:How to display a Bitmap on Image control

一個Bitmap文件&#xff0c;叫做screenShotFile, 你可以這樣顯示到Image控件上。 BitmapImage bi new BitmapImage(); bi.BeginInit(); bi.UriSource new Uri(this.screenShotFile, UriKind.Absolute); bi.EndInit(); this.scre…

QT中$$PWD的意思

$$PWD的意思為當前目錄 如pro文件中&#xff1a;INCLUDEPATH $$PWD/lib/x64-win64 $$PWD表示的意思就是pro文件所在的目錄。

Dubbo 整合 Pinpoint 做分布式服務請求跟蹤

2019獨角獸企業重金招聘Python工程師標準>>> 在使用Dubbo進行服務化或者整合應用后&#xff0c;假設某個服務后臺日志顯示有異常&#xff0c;這個服務又被多個應用調用的情況下&#xff0c;我們通常很難判斷是哪個應用調用的&#xff0c;問題的起因是什么&#xff0…

Linux 進程詳解

Linux內核的七大區間 1.進程管理&#xff08;進程創建&#xff0c;進程的三種狀態&#xff0c;進程間的調度&#xff0c;調度算法...&#xff09; 2.內存管理&#xff08;段式管理&#xff08;Linux所有段都從0開始&#xff09;&#xff0c;頁式管理--地址偏移量&#xff09; 3…

C#2.0 委托

委托 委托是一個非常不錯的設計&#xff0c;允許我們把方法做為參數傳遞&#xff0c;實現了開放閉放原則。在方法中我們只要有一個委托占位&#xff0c;調用者就可以傳入符合簽名的方法來做不同的操作&#xff0c;這也面向對象開發中多態的魅力。 但是在C#1.0的時候&#xff…

qt亂碼Could not decode“xxx.cpp“ with “UTF-8“-encoding.Editing not possible問題處理

問題描述&#xff1a;如題&#xff1a; 解決方法&#xff1a; 1、點擊Select Encoding按鈕 2、選擇按照系統編碼 3、選中System后點擊按編碼重新載入 4、問題解決

bootargs中的環境變量說明和一些常用的uboot命令

bootargs中的環境變量說明和一些常用的uboot命令 一些常見的uboot命令&#xff1a; Help [command]在屏幕上打印命令的說明 Boom [addr]啟動在內存儲器的內核 Tftpboot通過tftp啟動內核 Saveenv保存環境變量 setenv name [value] 設置環境變量 bootargs中的環境變量 co…

特斯拉自動駕駛系統秘密,來自特斯拉AI總監爆料

據外媒報道&#xff0c;特斯拉汽車公司人工智能&#xff08;AI&#xff09;總監安德烈卡帕西(Andrej Karpathy)日前參加2018年TRAIN AI大會時&#xff0c;剖析了該公司構建自動駕駛儀&#xff08;Autopilot&#xff09;計算機視覺解決方案的方法。據介紹&#xff0c;Autopilot編…

快捷鍵匯總

navicat 運行選中代碼 ctrshiftr navicat 運行所有代碼 ctrr 快速顯示桌面 wind 轉載于:https://www.cnblogs.com/caer/p/6064571.html

js做倒計時

var dinshiqi setInterval(timerun,1000) function timerun(){ //timegundong var now_time new Date(); var hours now_time.getHours(); //時 var minutes now_time.getMinutes(); //分 var seconds now_time.getSeconds(); //秒 //秒鐘 show_seconds 59 - parseInt(s…

QT右鍵點擊添加庫不響應的解決辦法

問題描述 QT在pro右鍵點擊添加庫不響應 解決方案 雙擊打開pro文件 在pro文件界面里單擊鼠標右鍵&#xff0c;并選擇添加庫。 解決問題

爬取前塵無憂python職位信息并保存到mongo數據庫

&#xff11;&#xff0e;re實現 1 import re,os2 import requests3 from requests.exceptions import RequestException4 5 MAX_PAGE 10 #最大頁數6 KEYWORD python7 headers {8 User-Agent:9 Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, lik…

實驗八——函數定義及調用總結

1.本次課學習到的知識點&#xff1a; (1)學習了數字金字塔。pyramid ()函數功能&#xff0c;函數定義時&#xff0c;形參n決定數字金字塔的層數&#xff1b; (2)不返回結果的函數定義&#xff1a; (3)復數運算&#xff1a; c1x1&#xff08;y1) i&#xff0c;c2x2&#xff08;y…

Apache JMeter 記一次使用HTTP工具POST提交JSON數據進行送積分高并發壓測(二)

一、前言 前面文章已經介紹Apache JMeter的基本概率和如果使用&#xff0c;但作為一個開發人員&#xff0c;自己寫的代碼都應該要好好的COD EREVIEW,好好的自測吧。但是有些場景比如高并發、負載和性能測試的時候&#xff0c;不借助工具是不好進行測試的。Jmter工具設計之初是用…

QT pro文件詳解

1.QT pro文件配置項說明 注釋&#xff1a;注釋是從一行的#開始&#xff0c;到這一行的結束。QT &#xff1a;這個是添加QT項目需要的模塊的&#xff0c;若項目中要排除某個模塊&#xff0c;也可用QT -配置項。TEMPLATE : 這個配置項確定qmake為這個應用程序生成哪種makefile …

可伸縮視頻編碼svc

可伸縮視頻編碼&#xff08;Scalable Video Coding, SVC&#xff09;技術把視頻信號編碼成分層的形式&#xff0c;當帶寬不足時只對基本層的碼流進行傳輸和解碼&#xff0c;但這時解碼的視頻質量不高。當帶寬慢慢變大時&#xff0c;可以傳輸和解碼增強層的碼流來提高視頻的解碼…

【vim】幾種模式的切換

很多初學者啟動vim后&#xff0c;不知道怎么輸入字符&#xff1a;按了半天字母&#xff0c;結果屏幕還是空的。 vim和記事本或WORD不一樣&#xff0c;不是一打開后就可以輸入文字&#xff0c;此時它處于正常模式。 vim一共有4個模式&#xff1a; 正常模式 (Normal-mode) 插入模…

數據結構----順序表與單鏈表(JAVA)

下面為學習順序表和單鏈表的一些基本操作函數&#xff1a; 1 public class SeqList<T> extends Object {2 protected int n;3 protected Object[] element;4 5 public SeqList(int length) {6 this.element new Object[length];7 this.n 0…

SSH初體驗系列--Hibernate--1--環境配置及demo

最近在學hibernate,常見的教程都是搭配mysql,因為公司本地電腦用的是pg,所以就嘗試著做個pg的小demo. 自己也是邊學邊寫&#xff0c;只當是加深印象.話不多說&#xff0c;直接開始; 一) 準備工作; 1) 本地安裝postgresql ,這個不多說&#xff0c;自己去網上下載; 注: 本次使用的…

Qt學習:QAction系列詳解

一、QAction類詳解 【詳細描述】 QAction類提供了抽象的用戶界面action&#xff0c;這些action可以被放置在窗口部件中。 應用程序可以通過菜單&#xff0c;工具欄按鈕以及鍵盤快捷鍵來調用通用的命令。由于用戶期望每個命令都能以相同的方式執行&#xff0c;而不管命令所使用的…