網站首頁 編程語言 正文
1、關鍵字
關鍵字是C語言提供的,不能自己創建關鍵字;
關鍵字不能用作變量名,eg:int char;這樣的寫法是不可取的。
2、常見關鍵字
auto break case char const continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef union unisigned void volatile while以上列舉的均為常見關鍵字。
(1)auto是自動的,每個局部變量都是auto修飾的,如:在結構體中有寫
{ int a =10; }
這其實是自動創建、自動銷毀的,屬于自動變量,它前面省略了auto,其實是auto int a =10;
(2)extern:用來聲明外部變量
(3)register:寄存器關鍵字
int main() { register int num = 100;//指的是建議num的值放在寄存器中 return 0; }
在計算機中,數據打給可以存放在“寄存器”、“高速緩存”、“內存”、“硬盤”、“網盤”這幾個地方。
從下往上,造價越來越高,空間越來越小,但讀寫速度越來越快。
將“大量”或者“頻繁”被使用的數據,放在寄存器里面,可以提升效率。
(4)signed:有符號的 unsigned:無符號的
(5)static:靜態的
在語言中,static是用來修飾變量和函數的。
- 修飾局部變量----靜態局部變量,改變了局部變量的生命周期(本質上是改變了變量的存儲類型)
- 修飾全局變量—靜態全局變量
- 修飾函數—靜態函數
1>static修飾局部變量
聲明test函數
void test()//聲明test函數 { int a = 1; a++; printf("%d",a); return 0; } int main() { int i = 0; while (i < 10) { test(); i++; } return 0; }
運行結果為:2222222222
若將test函數中的int a=1;
改為static int a =1;
,則運行結果為
234567891011
補充:
內存可以劃分為“棧區”(存放局部變量)、“堆區”(動態內存分配)以及“靜態區”(存放全局變量以及ststic修飾的靜態變量)。所以在該例子中,a由棧區到靜態區,它的存儲類型改變了,進一步致使生命周期改變。程序不結束,全局變量和static修飾的靜態變量不銷毀。
2>static修飾全局變量
全局變量在整個工程中都可以使用,但是被static修飾之后就不能在整個工程中使用了,若在一個源文件里面寫static int g_val=2022;
,在另外一個源文件里面寫:
點擊運行之后會報錯,顯示無法解析的外部符號g_val
static修飾全局變量會使得這個全局變量只能在自己所在的.c源文件里面使用,其它源文件不能使用。
全局變量在其它源文件內部可以使用,是因為全局變量具有外部鏈接屬性,但是被static修飾之后,就變成了內部鏈接屬性,其它源文件就不能鏈接到這個靜態的全局變量了。
3>static修飾函數
在一個源文件里面寫
int Add(int x, int y) { return x + y; }
在另外一個源文件里面寫
extern int Add(int x,int y) int main() { int a = 10; int b = 20; int sum = Add(a,b); printf("sum=%d\n",sum); return 0; }
這樣是可以執行的,但是將int Add(int x, int y)
改為static int Add(int x, int y)
就會報錯,顯示無法解析的外部符號。
static修飾函數使得函數只能在自己所在的源文件內部使用,不能在其它源文件里面使用,本質上是static將函數的外部鏈接屬性變成了內部鏈接屬性,和static修飾全局變量一樣。
(6)struct:結構體關鍵字
(7)typedef:類型重定義
下面的代碼是說要定義一個無符號的整數,但是這樣寫有點麻煩,于是就用到了typedef關鍵字。
int main() { unsigned int num = 100; return 0; }
利用typedef關鍵字進行類型重定義:
typedef unsigned int u_int; //意思是將unsigned int重新命名為u_int,在之后的代碼里面,u_int就代表無符號整型 int main() { u_int num1 = 100; return 0; }
(8)union:聯合體(共用體)
(9)void:無,空
(10)volatile
問:define與include是否為關鍵字?
答:它們均不是關鍵字,它們是預處理指令。
原文鏈接:https://blog.csdn.net/qq_42822743/article/details/125071822
相關推薦
- 2022-06-24 Android音視頻開發之MediaExtactor使用教程_Android
- 2022-10-14 【Python】pytorch 保存模型、checkpoint
- 2022-08-18 python列表生成器常用迭代器示例詳解_python
- 2022-11-25 React之echarts-for-react源碼解讀_React
- 2022-05-07 Python?ini配置文件示例詳解_python
- 2022-03-23 Unity3d實現無限循環滾動背景_C#教程
- 2022-10-06 Python中os模塊的12種用法總結_python
- 2022-09-17 Go語言學習筆記之錯誤和異常詳解_Golang
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支