C語言教程(十一):C 語言中四種主要作用域及作用域嵌套遮蔽

一、引言

????????在 C 語言里,作用域指的是程序中變量、函數、類型等標識符能夠被使用的范圍。C 語言里有四種主要的作用域:塊作用域、函數作用域、文件作用域和原型作用域,下面為你展開介紹:

二、塊作用域

? ? ? ?

  • 定義:塊作用域是 C 語言中最常見的作用域類型,變量在由花括號 {}?所包圍的代碼塊內聲明時,就具有塊作用域。代碼塊能夠是函數體、循環體、條件語句體等。
  • 規則
    • 可見性:具備塊作用域的變量僅能在其聲明所在的代碼塊以及嵌套在該代碼塊內的子代碼塊中被訪問,在代碼塊外部,該變量不可見。
    • 生命周期:塊作用域變量的生命周期從其聲明處開始,到包含該聲明的代碼塊執行結束時終止。一旦代碼塊執行完畢,變量所占用的內存就會被釋放。
  • 示例
#include <stdio.h>
int main() {{int num = 10; // 此變量具有塊作用域printf("num 的值: %d\n", num);}// 下面這行代碼會引發編譯錯誤,因為 num 在該作用域不可見// printf("num 的值: %d\n", num); return 0;
}

三、函數作用域

  • 定義:在 C 語言中,僅有 goto?語句的標簽具有函數作用域。
  • 規則
    • 可見性:函數作用域的標簽在整個函數內部均可見,不管標簽聲明在函數的哪個位置。
    • 生命周期:標簽的生命周期和函數的執行周期一致,只要函數在執行,標簽就能夠被引用。
  • 示例
#include <stdio.h>
void test() {goto end; // 跳轉到 end 標簽printf("這行代碼會被跳過。\n");
end:printf("已到達 end 標簽。\n");
}
int main() {test();return 0;
}

四、文件作用域

文件作用域

  • 定義:當變量或函數在所有函數和代碼塊之外聲明時,它們就具有文件作用域。
  • 規則
    • 可見性:具有文件作用域的變量和函數在整個源文件中都可見。不過,若要在其他源文件中使用這些標識符,就需要進行恰當的聲明(使用 extern?關鍵字)。
    • 生命周期:文件作用域變量和函數的生命周期從程序開始執行時起,到程序結束時止。
  • 示例
#include <stdio.h>
// 具有文件作用域的變量
int globalVar = 20; 
// 具有文件作用域的函數
void display() { printf("全局變量 globalVar 的值: %d\n", globalVar);
}
int main() {display();return 0;
}

五、原型作用域

  • 定義:原型作用域僅適用于函數原型里聲明的參數。函數原型是在函數定義之前對函數的聲明,用于告知編譯器函數的名稱、返回類型和參數類型。
  • 規則
    • 可見性:函數原型中聲明的參數名僅在原型聲明的括號內有效。在函數原型外部,這些參數名不可見,編譯器只關注參數的類型。
    • 生命周期:原型作用域參數的生命周期僅限于函數原型聲明本身,對函數定義中的參數沒有影響。
  • 示例
#include <stdio.h>
// 函數原型
int sum(int a, int b); 
// 函數定義
int sum(int x, int y) { return x + y;
}
int main() {int result = sum(3, 5);printf("兩數之和: %d\n", result);return 0;
}

六、作用域的嵌套和遮蔽

  • 作用域的嵌套:C 語言中作用域能夠嵌套,比如一個函數內部可以包含多個代碼塊,每個代碼塊都有自身的作用域。當訪問一個變量時,編譯器會從當前作用域開始查找,若找不到,就會向上一級作用域繼續查找,直至找到該變量或者到達最外層作用域。
  • 遮蔽:當不同作用域中聲明了同名的變量時,內層作用域的變量會遮蔽外層作用域的變量。也就是說,在內層作用域中使用該變量名時,訪問的是內層作用域的變量,而非外層作用域的變量。
  • 示例
#include <stdio.h>
int num = 10; // 具有文件作用域的變量
int main() {int num = 20; // 具有塊作用域的變量,遮蔽了文件作用域的 numprintf("塊作用域 num 的值: %d\n", num);{int num = 30; // 內層塊作用域的變量,遮蔽了外層塊作用域的 numprintf("內層塊作用域 num 的值: %d\n", num);}return 0;
}

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

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

相關文章

初次嘗試Ghidra

最近看京東讀書上有本書叫《Ghidra權威指南》&#xff0c;竟然是美國國家安全局出品的逆向工具&#xff0c;我真是孤陋寡聞&#xff0c;第一次聽說。趕緊試試。 Release Ghidra 11.3.2 NationalSecurityAgency/ghidra GitHub 最新版本竟然是上周發布的&#xff0c;看來很活…

樂視系列玩機---樂視2 x620 x628等系列線刷救磚以及刷寫第三方twrp 卡刷第三方固件步驟解析

樂視2 x620 x628 x626等,搭載了Helio X20處理器,mtk6797芯片。 通過博文了解?????? 1??????-----詳細解析樂視2 x620系列黑磚線刷救磚的步驟 2??????----官方兩種更新卡刷步驟以及刷寫第三方twrp過程與資源 3??????----樂視2 mtk系列機型救磚 刷…

web原生API AbortController網絡請求取消方法使用介紹:防止按鈕重復點擊提交得最佳方案

在前端開發中&#xff0c;取消網絡請求是一個常見的需求&#xff0c;尤其是在用戶頻繁操作或需要中斷長時間請求的場景下。 AbortController 主要用于 ?優雅地管理和取消異步操作&#xff1a; 瀏覽器原生 API 一、代碼解析 1. ?創建 AbortController 實例 const controlle…

2025智能駕駛趨勢評估

以下是對2025年智能駕駛趨勢的評估&#xff1a; 技術發展 ? 自動駕駛級別提升&#xff1a;2025年有望成為L3級自動駕駛的商用元年。L3級自動駕駛技術開始從高端車型向20萬元以下價格帶下沉&#xff0c;部分車企如江淮和華為合作的尊界S800、小鵬汽車等都在積極推進L3級自動駕駛…

Spring MVC DispatcherServlet 的作用是什么? 它在整個請求處理流程中扮演了什么角色?為什么它是核心?

DispatcherServlet 是 Spring MVC 框架的絕對核心和靈魂。它扮演著前端控制器&#xff08;Front Controller&#xff09;的角色&#xff0c;是所有進入 Spring MVC 應用程序的 HTTP 請求的統一入口點和中央調度樞紐。 一、 DispatcherServlet 的核心作用和職責&#xff1a; 請…

Linux 內核中 cgroup 子系統 cpuset 是什么?

cpuset 是 Linux 內核中 cgroup&#xff08;控制組&#xff09; 的一個子系統&#xff0c;用于將一組進程&#xff08;或任務&#xff09;綁定到特定的 CPU 核心和 內存節點&#xff08;NUMA 節點&#xff09;上運行。它通過限制進程的 CPU 和內存資源的使用范圍&#xff0c;優…

【MATLAB第115期】基于MATLAB的多元時間序列的ARIMAX的預測模型

【MATLAB第115期】基于MATLAB的多元時間序列的ARIMAX的預測模型 ?一、簡介 ARIMAX?&#xff08;Autoregressive Integrated Moving Average with eXogenous inputs&#xff09;模型是一種結合自回歸&#xff08;AR&#xff09;、差分&#xff08;I&#xff09;、移動平均&a…

數據庫對象與權限管理-視圖與索引管理

一、視圖&#xff08;View&#xff09;管理 1. 視圖的定義與本質 視圖&#xff08;View&#xff09;是Oracle數據庫中的邏輯表&#xff0c;它不直接存儲數據&#xff0c;而是通過預定義的SQL查詢動態生成結果集。視圖的本質可以理解為&#xff1a; 虛擬表&#xff1a;用戶可…

IPoIB驅動接收路徑深度解析:從數據包到協議棧

引言 在InfiniBand網絡中,IPoIB(IP-over-InfiniBand)協議通過封裝和模擬以太網行為,使得傳統IP應用能夠無縫運行。其接收路徑是性能優化的關鍵環節,涉及硬件中斷處理、內存管理、協議解析等多個復雜步驟。本文以Linux內核中ipoib_ib_handle_rx_wc_rss函數為核心,結合IPo…

Oracle高級語法篇-分析函數詳解

Oracle 分析函數詳解 在Oracle數據庫中&#xff0c;分析函數&#xff08;Analytical Functions&#xff09;是一類非常強大的工具&#xff0c;它們允許在查詢結果集上進行復雜的計算和分析&#xff0c;而無需使用自連接或子查詢等復雜操作。本文將詳細介紹Oracle分析函數的使用…

使用 Nacos 的注意事項與最佳實踐

&#x1f4f9; 背景 Nacos 憑借其強大&#x1f4aa;的服務發現、配置管理和服務管理能力&#xff0c;成為構建分布式系統的得力助手。然而&#xff0c;要充分發揮 Nacos 的優勢&#xff0c;實現系統的高性能、高可用&#xff0c;掌握其使用過程中的注意事項和最佳實踐至關…

解決Python與Java交互亂碼問題:從編碼角度優化數據流

在現代軟件開發中&#xff0c;跨語言系統的集成已經成為日常工作的一部分。特別是當Python和Java之間進行交互時&#xff0c;編碼問題往往會成為導致數據傳輸錯誤、亂碼以及難以調試的主要原因之一。 你是否曾遇到過這種情境&#xff1a;Python腳本通過標準輸出返回了正確的數…

AI大模型-window系統CPU版安裝anaconda以及paddle詳細步驟-親測有效

window系統CPU版安裝anaconda以及paddle詳細步驟-親測有效 一 安裝anaconda 下載地址:anaconda下載 下載成功后,選擇非C盤安裝,按提示安裝即可修改鏡像文件 安裝成功后,運行anaconda軟件,若提示更新則點擊更新,更新完后,修改鏡像文件 找到用戶目錄下的.condarc文件,覆…

第48講:空間大數據與智慧農業——時空大數據分析與農業物聯網的融合實踐

目錄 ?? 一、什么是空間大數據? ?? 二、農業物聯網:數據采集的神經末梢 ?? 三、融合應用:空間大數據 + 農業IoT = 決策大腦 1. 精準灌溉管理 2. 時空病蟲害預警 3. 農業碳監測與生態評估 ?? 四、技術實踐案例:農田干旱預警系統 ?? 場景設定: ?? 數據…

JSP服務器端表單驗證

JSP服務器端表單驗證 一、引言 在Web開發中&#xff0c;表單驗證是保障數據合法性的重要環節。《Web編程技術》第五次實驗要求&#xff0c;詳細講解如何基于JSP內置對象實現服務器端表單驗證&#xff0c;包括表單設計、驗證邏輯、交互反饋等核心功能。最終實現&#xff1a;輸…

[創業之路-381]:企業法務 - 企業經營者,有哪些生產安全風險,哪些人承擔責任?承擔哪些責任?如何防范?

企業生產安全風險、責任主體、責任類型及防范措施 一、企業生產安全風險類型 安全生產條件不達標 包括生產設施、設備不符合國家安全標準&#xff0c;作業環境存在重大安全隱患&#xff08;如易燃易爆物品存放不當、通風不良等&#xff09;。案例&#xff1a;某企業因未對特種…

BPC電波授時技術

BPC電波授時技術是一種基于低頻時碼信號的授時方式&#xff0c;廣泛應用于中國的時間同步領域。其核心在于通過發射特定頻率的低頻信號&#xff0c;將高精度的時間信息傳遞給接收設備&#xff0c;從而實現時間同步。以下將從技術原理、系統組成、應用領域及發展歷史等方面詳細介…

polkit補丁升級手順

確認當前Polkit版本 rpm -qa |grep polkit上傳polkit安裝包 上傳安裝包&#xff1a; polkit-0.115-11.el8_4.2.x86_64.rpm polkit-libs-0.115-11.el8_4.2.x86_64.rpm執行升級操作 yum update polkit-0.115-11.el8_4.2.x86_64.rpm polkit-libs-0.115-11.el8_4.2.x86_64.rpm檢…

Pycharm(十五)面向對象程序設計基礎

目錄 一、定義類及使用類的成員 二、self關鍵字介紹 三、在類內部調用類中的函數 class 類名&#xff1a; 屬性&#xff08;類似于定義變量&#xff09; 行為&#xff08;類似于定義函數&#xff0c;只不過第一個形參要寫self&#xff09; 一、面向對象基本概述 屬性&…

ZYNQ筆記(九):定時器中斷

版本&#xff1a;Vivado2020.2&#xff08;Vitis&#xff09; 任務&#xff1a;使用定時器 (私有定時器) 中斷 實現 LED&#xff08;PS端&#xff09; 定時1s亮滅翻轉 目錄 一、介紹 二、硬件設計 三、軟件設計 四、效果 一、介紹 Zynq系列是Xilinx(現為AMD)推出的集成了AR…