<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
C語言一共多少個關鍵字呢?一般的書上,都是32個(包括本書),但是這個都是C90(C89)的標準。其實C99後又新增了5個關鍵字。不過,目前主流的編譯器,對C99支援的並不好,我們後面預設情況,使用C90,即,認為32個
在正式開始講解關鍵字之前,我們需要了解下面這些基本概念
變數分為全域性變數和區域性變數
區域性變數:定義在程式碼塊中的變數叫做區域性變數。區域性變數具有臨時性。進入程式碼塊,自動形成區域性變數,退出程式碼塊自動 釋放。[網上很多說函數中的變數是區域性變數,不能說錯,但說法是不準確的]
全域性變數:在所有函數外定義的變數,叫做全域性變數。全域性變數具有全域性性。
注:程式碼塊 — 在函數中,用{}括起來的區域,就叫做程式碼塊,程式碼塊可以巢狀
作用域概念:指該變數可以被正常存取的程式碼區域
全域性變數的作用域:在整個程式執行期間都有效
區域性變數的作用域:只在區域性變數所在的程式碼塊內有效
生命週期概念:指的是該變數從定義開闢空間到釋放的時間範圍,所謂的釋放,指的是曾經開闢的空間”被釋放“。
全域性變數的生命週期:定義完成之後,程式執行的整個生命週期內,該變數一直都有效
區域性變數的生命週期:進入程式碼塊,形成區域性變數[開闢空間],退出程式碼塊,"釋放"區域性變數
#include<stdio.h> int g_val = 10; //g_val 在所有函數外部定義,是全域性變數 int main() { int a = 20; //a 在main函數內部定義,是區域性變數 printf("%dn", g_val); printf("%dn", a); return 0; }
#include<stdio.h> int g_val = 100; int main() { int x = 10; if (x == 10) { int y = 20; pritnf("%d %d", x, y); //可以 } pritnf("%d %d", x, y); //報錯,y只能在 if 程式碼塊內部被存取 }
#include <stdio.h> int g_x = 100; //全域性變數 void show() { printf("show: 全域性: %dn", g_x); //在任何程式碼塊中都可以被存取 } int main() { show(); printf("main: 全域性: %dn", g_x); //在任何程式碼塊中都可以被存取,甚至被修改 return 0; }
#include<stdio.h> int g_x = 100; //全域性變數 int main() { int g_x = 10; //區域性變數,與全域性同名 printf("g_x:%dn", g_x); //輸出的是區域性,也就是區域性和全部同名的時候,優先區域性。 return 0; }
總結:作用域是空間上的概念,表示該變數能夠被有效存取或使用的區域
生命週期是時間上的概念,表示該變數空間什麼時候被開闢,什麼時候被釋放
當區域性變數和全域性變數重複出現時,區域性變數優先(就近原則)
1、如何使用:一般在程式碼塊中定義的變數,即區域性變數,預設都是auto修飾的,不過一般省略,但不是所有的變數預設都是auto修飾的,auto一般只用來修飾區域性變數
2、用法:auto關鍵字比較古老,一般我們在定義變數的時候直接省略即可
3、總結:auto用來修飾區域性變數,表示該區域性變數的生命週期和作用域只在該程式碼塊內有效,可以省略,不能用來修飾全域性變數。
#include<stdio.h> auto int b = 10; //報錯,auto 不能用來修飾全域性變數 int main() { auto int a = 30; // 等價於 int a = 30; }
在計算機內部,越靠近CPU的儲存單元的執行速度越快,但其相對單位制造成本也越高,越遠離CPU的儲存單元執行速度越慢,單位造價越低,為了以最小的成本,達到最大的CPU執行效率,出現了儲存分級的辦法。
暫存器存在的原因:CPU主要是負責進行計算的硬體單元,但是為了方便運算,一般第一步需要先把資料從記憶體讀取到CPU內,那麼也就需要CPU具有一定的資料臨時儲存能力,但是CPU並不是當前要計算了,才把特定資料讀到CPU裡面,因為那樣太慢了。 所以現代CPU內,都整合了一組叫做暫存器的硬體,用來做臨時資料的儲存。
暫存器存在的本質: 在硬體層面上,提高計算機的運算效率。因為不需要再從記憶體裡讀取資料。
register修飾變數的作用:儘量將所修飾變數,放入CPU寄存區中,從而達到提高效率的目的
register修飾變數提高效率的本質:將變數放入暫存器中,使CPU可以直接對該資料進行操作,而不需要從記憶體中對其進行讀取。
既然用register修飾的變數可以提高效率,那麼是不是所以的變數都最好用register修飾呢?答案當然不是的。因為暫存器的數量是有限的,大量使用register修飾反而會降低程式的執行效率。那麼什麼樣的變數應該被register修飾呢?
注意:
#include <stdio.h> int main() { register int a = 0; printf("&a = %pn", &a); //編譯器報錯:錯誤 1 error C2103: 暫存器變數上的「&」 //注意,這裡不是所有的編譯器都報錯,目前我們的vs2022是報錯的。 return 0; }
到此這篇關於C語言 auto和register關鍵字的文章就介紹到這了,更多相關C語言auto、register內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45