深入理解C語言中的變量和常量

變量和常量

    • 1. 前言
    • 2. 預備知識
      • 2.1 printf和%d
      • 2.2 \n
      • 2.3 scanf
      • 2.4 scanf在vs中報錯
      • 2.5 extern
      • 2.6 數組的初始化
    • 3. 變量和常量的區別
    • 4. 變量
      • 4.1 定義變量的方法
      • 4.2 變量的分類
        • 4.2.1 局部優先
      • 4.3 變量的使用
      • 4.4 變量的作用域
        • 4.4.1 局部變量的作用域
        • 4.4.2 全局變量的作用域
      • 4.5 變量的生命周期
        • 4.5.1 局部變量的生命周期
        • 4.5.2 全局變量的生命周期
    • 5. 常量
      • 5.1 字面常量
      • 5.2 const修飾的常變量
      • 5.3 #define定義的標識符常量
      • 5.4 枚舉常量

在這里插入圖片描述

1. 前言

大家好,我是努力學習游泳的魚。本文會帶你進入變量和常量的大門,帶你進一步了解C語言的奧秘。

2. 預備知識

2.1 printf和%d

#include <stdio.h>int main()
{int a = 100;printf("a = %d\n", a);return 0;
}

這段代碼會輸出a = 100
因為a = %d中,%d表示打印整數,會被直接替換成a的值,即100

2.2 \n

\n是一個轉義字符,表示換行。

2.3 scanf

scanf是C語言的庫函數,對應的頭文件是stdio.h
printf相反,scanf用來完成從鍵盤中輸入數據的操作,
使用時注意在變量名前面加上&,這點初學者容易忘記。

#include <stdio.h>int main()
{int a = 0;scanf("%d", &a); // 注意不能漏掉&return 0;
}

2.4 scanf在vs中報錯

如果你使用的是visual studio系列的編譯器,需要在程序的第一行加上一行代碼才能使用scanf

#define _CRT_SECURE_NO_WARNINGS 1

如果你不嫌麻煩可以每次都加上這行代碼。
如果你不想每次都寫這行代碼,可以在vs的安裝路徑找到newc++file.cpp文件,在里面加上這行代碼即可。當然你也可以研究一下scanf的替代函數scanf_s,不過我不建議這么做。
第一步:找到newc++file.cpp
可以使用everything進行查找點這里下載
但是你直接打開的話是修改不了的,因為權限不夠。這有兩種解決方法。
解決方法一:把文件拖到桌面,修改后再放回去。
解決方法二:復制文件路徑,管理員權限打開記事本,再打開文件路徑就行了

2.5 extern

extern是用來聲明外部符號的。任何變量或函數使用前都要先聲明或者定義,如果這個函數或者變量在其他文件內,則可以使用extern聲明。

2.6 數組的初始化

這里只需要明白,下面代碼方括號里的10必須是個常量(不變的量)就行了。

int arr[10] = {0};

3. 變量和常量的區別

會改變的量,叫做變量。
不會改變的量,叫做常量。

4. 變量

4.1 定義變量的方法

類型+名字(+初始化)

int age = 10;
char ch = 'w';

4.2 變量的分類

變量分為全局變量和局部變量。
定義在大括號外部的變量叫做全局變量。
定義在大括號內部的變量叫做局部變量。

int b = 1000; // 全局變量 - 定義在大括號外面int main()
{int a = 100; // 局部變量 - 定義在大括號里面return 0;
}
4.2.1 局部優先

當全局變量和局部變量的名字沖突時,局部優先

#include <stdio.h>int a = 1000; // 全局變量int main()
{int a = 100; // 局部變量printf("a = %d\n", a);return 0;
}

這里局部變量的a和全局變量的a名字沖突了,但是輸出結果是a = 100

不建議把全局變量和局部變量的名字取成一樣的!

4.3 變量的使用

寫一個代碼,完成兩個整數的相加

#include <stdio.h>int main()
{int num1 = 0;int num2 = 0;int sum = 0;// 輸入scanf("%d %d", &num1, &num2);// 求和sum = num1 + num2;// 輸出printf("sum = %d\n", sum);return 0;
}

4.4 變量的作用域

一個變量哪里可以使用,哪里就是它的作用域。

4.4.1 局部變量的作用域

局部變量的作用域是變量所在的局部范圍。

#include <stdio.h>int main()
{{int a = 100; // 局部變量printf("%d\n", a); // 這里可以使用}printf("%d\n", a); // 這里不能使用return 0;
}
4.4.2 全局變量的作用域

全局變量的作用域是整個工程。

#include <stdio.h>int a = 100; // 全局變量void test()
{printf("test::%d\n", a); // 這里可以使用
}int main()
{test();printf("main::%d\n", a); // 這里可以使用return 0;
}

全局變量甚至可以跨文件使用,但在使用前要使用extern聲明
test1.c

int a = 100; // 跨文件的全局變量

test2.c

#include <stdio.h>extern int a; // extern是用來聲明外部符號的void test()
{printf("test::%d\n", a); // 可以使用
}int main()
{test();printf("main::%d\n", a); // 可以使用return 0;
}

4.5 變量的生命周期

一個變量從創建到銷毀的時間段就是它的生命周期。

4.5.1 局部變量的生命周期

進作用域生命周期開始,出作用域生命周期結束。

4.5.2 全局變量的生命周期

全局變量的生命周期和程序的生命周期相同。即:與程序共存亡!

5. 常量

5.1 字面常量

直接寫出來的常量就叫做字面常量。

20;
3.14;
'a'; // 字符常量
"abcdef"; // 字符串常量

字面常量可以給變量賦值或初始化。

int a = 10;
char ch = 'w';

5.2 const修飾的常變量

const是C語言的關鍵字,意思是常屬性。

const修飾的變量,具有常屬性,在語法上不能改變但本質上還是個變量
所以,我們稱這種變量為常變量。

int main()
{const int a = 10;a = 20; // 不能像這樣改變a的值了return 0;
}

下面證明const修飾的常變量本質是個變量。
數組初始化時方括號里必須是常量。

int arr[10] = {0};

那么const修飾的常變量能不能用來初始化數組時指定大小呢?

int main()
{const int n = 10;int arr[n] = {0}; // 這里會報錯return 0;
}

答案是:不能!
由此可知,

在C語言里,const修飾的常變量只是具有常屬性,但本質上是個變量,不能當做常量來處理。

5.3 #define定義的標識符常量

#include <stdio.h>#define M 100 // 這里M就是一個常量int main()
{int a = M; // M可以給變量賦值int arr[M] = {0}; // M可以在數組初始化時指定大小printf("a = %d\n", a);return 0;
}

5.4 枚舉常量

C語言提供了一個關鍵字:enum,就是枚舉的意思。

枚舉,即一一列舉。
生活中有些東西是可以一一列舉的。比如:
性別:男,女,保密。
三原色:紅色,綠色,藍色。
星期:星期一,星期二,……,星期日。
C語言提供了枚舉類型

enum Sex // enum Sex就是一個枚舉類型
{// 這里的MALE,FEMALE,SECRET就是枚舉常量MALE,FEMALE,SECRET
}; // 分號不能省略int main()
{enum Sex s = MALE; // 可以用枚舉常量給枚舉類型初始化或賦值return 0;
}

枚舉常量也是有值的,默認從0開始。

#include <stdio.h>enum Color
{RED, // 0GREEN, // 1BLUE // 2
};int main()
{printf("%d %d %d", RED, GREEN, BLUE); // 輸出0 1 2return 0;
}

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

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

相關文章

機器學習|KNN和Kmeans

KNN和Kmeans KNN KNN-K個最近的鄰居&#xff0c;而K是可人先預設出來的。 所謂近朱者赤&#xff0c;近墨者黑。 可以選取離當前最近的K個樣本來作為輔助判斷&#xff0c;因為本樣本和最近的K個樣本應該是處于一種相似的狀態。 以下是一個蘋果和梨的識別任務。 圖上會出現一個未…

深入Spring Boot核心技術:代碼實戰解析

第一章&#xff1a;揭開Spring Boot自動配置的面紗 自動配置原理 讓我們首先通過一個簡化的Spring Boot應用啟動類來直觀感受自動配置的工作原理&#xff1a; java import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.Sprin…

【軟件設計師】通俗易懂的去了解算法的時間復雜度

&#x1f413; 時間復雜度 常用排序的時間復雜度 時間頻度 算法需要花費的時間&#xff0c;和它語句執行的次數是成正比的&#xff0c;所以會把一個算法種語句執行次數稱為語句頻度和時間頻度、記作T(n)。 定義 時間復雜度就是找到一個無限接近時間頻度T(n)同數量級的函數&am…

小腦萎縮患者生活指南:守護你的每一步

親愛的讀者朋友們&#xff0c;今天我們要聊一聊一個特殊但非常重要的群體——小腦萎縮患者。在這個充滿挑戰的旅程中&#xff0c;我們將一起探索如何用愛和智慧為患者打造一個更加安全、舒適的生活環境。 小腦萎縮是指小腦細胞逐漸減少&#xff0c;導致小腦體積縮小的一種病癥…

全量知識系統問題及SmartChat給出的答復 之16 幣圈生態鏈和行為模式

Q.42 幣圈生態鏈和行為模式 我認為&#xff0c;上面和“幣”有關的一系列概念和技術&#xff0c;按設計模式的劃分 &#xff0c;整體應該都屬于行為模式&#xff0c;而且應該囊括行為模式的所有各個方面。 而行為又可以按照三種不同的導向&#xff08;以目的或用途為導向、過…

互聯網摸魚日報(2024-03-04)

互聯網摸魚日報(2024-03-04) 36氪新聞 Sora來了&#xff0c;你又焦慮了嗎&#xff1f; 最前線&#xff5c;安踏首家球鞋集合店落地北京三里屯 一位中國遙感科學家&#xff0c;決定“跨界”拯救瀕危動物野駱駝 | 最前線 本周雙碳大事&#xff1a;工信部等七部門發文推動制造…

mirthConnect忽略HTTPS SSL驗證

mirthConnect SSL忽略驗證 1、下載https網站證書 點擊不安全---->證書無效 2、查看mirth 秘鑰庫口令 在mirthConnect 的conf目錄下面keystore.storepass 3、導入證書到本地 在jdk的bin目錄下面執行 keytool -importcert -file "下載的網站證書路徑" -keysto…

LeetCode每日一題【c++版】- leetcode 225.用隊列實現棧

題目描述 請你僅使用兩個隊列實現一個后入先出&#xff08;LIFO&#xff09;的棧&#xff0c;并支持普通棧的全部四種操作&#xff08;push、top、pop 和 empty&#xff09;。 實現 MyStack 類&#xff1a; void push(int x) 將元素 x 壓入棧頂。int pop() 移除并返回棧頂元素…

Python中按指定數量分割列表字符串的方法

引言 處理列表數據時&#xff0c;有時我們需要將一個包含長字符串的列表分割成按照特定長度的小字符串的多個列表。這在文本處理、批量數據處理或者當我們需要將數據分塊進行并行處理時非常常見。Python作為一個強大的編程語言&#xff0c;提供了很多方便的方法來實現這一功能…

CV論文--2024.3.4

1、Deep Networks Always Grok and Here is Why 中文標題&#xff1a;深度網絡總是讓人摸不著頭腦&#xff0c;原因如下 簡介&#xff1a;本文探討了深度神經網絡&#xff08;DNN&#xff09;中一種稱為"延遲泛化"或"Grokking"的現象。在接近零的訓練誤差…

使用ssh密鑰提交、拉取代碼的介紹

網絡世界中的數據并不安全 網絡中無時無刻有大量的數據傳輸&#xff0c;傳輸過程中需要經過各種網絡設備和物理媒介你的數據可能會在傳輸的某一個環節被一個“中間人”攔截&#xff0c;造成泄密&#xff0c;甚至會篡改你的數據&#xff0c;讓你發出錯誤的信息 SSH 為 Secure …

MySQL 5.5、5.6、5.7的主從復制改進

主從復制面臨的問題 MySQL一直以來的主從復制都是被詬病,原因是: 1、主從復制效率低 早期mysql的復制是通過將binlog語句異步推送到從庫。從庫啟動一個IO線程將接收到的數據記錄到relaylog中;另外啟動一個SQL線程負責順序執行relaylog中的語句實現對數據的拷貝。 這里的…

如何用Elementor創建WordPress會員網站

在下面的文章中&#xff0c;我們將向您展示如何使用Elementor和MemberPress在WordPress中輕松構建會員網站。這篇文章將涵蓋WordPress會員網站設置過程、會員資格和受保護內容創建、重要頁面和登錄表單設計、電子郵件通知管理、報告等。 目錄 什么是WordPress會員網站&#x…

【go從入門到精通】go基本類型和運算符用法

大家好&#xff0c;這是我給大家準備的新的一期專欄&#xff0c;專門講golang&#xff0c;從入門到精通各種框架和中間件&#xff0c;工具類庫&#xff0c;希望對go有興趣的同學可以訂閱此專欄。 --------------------------------------------------------------------------…

與字體有關的CSS

隱藏多余字體 text-overflow: ellipsis &#xff08;多余文本顯示省略號&#xff09; 需要配合overflow使用 -webkit-box-orient: vertical; display: -webkit-box; -webkit-line-clamp: number &#xff08;超出多少行顯示省略號&#xff09; 強制顯示一行 whi…

.NET高級面試指南專題十四【 觀察者模式介紹,最常用的設計模式之一】

簡介&#xff1a; 觀察者模式&#xff08;Observer Pattern&#xff09;是一種行為型設計模式&#xff0c;其目的是定義了一種一對多的依賴關系&#xff0c;當一個對象的狀態發生變化時&#xff0c;所有依賴于它的對象都會得到通知并自動更新。 原理&#xff1a; 在觀察者模式中…

從零開始搭建web組態

成果展示&#xff1a;by組態[web組態插件] 一、技術選擇 目前只有兩種選擇&#xff0c;canvas和svg Canvas: 是一個基于像素的渲染引擎&#xff0c;使用JavaScript API在畫布上繪制圖像&#xff0c;它的優點包括&#xff1a; Canvas渲染速度快&#xff0c;適合處理大量圖像和…

TIOBE 2024榜單啟示:程序員如何把握未來編程趨勢與機遇

程序員如何選擇職業賽道&#xff1f; 程序員的職業賽道就像是一座迷宮&#xff0c;有前端的美麗花園&#xff0c;后端的黑暗洞穴&#xff0c;還有數據科學的神秘密室。你準備好探索這個充滿挑戰和機遇的迷宮了嗎&#xff1f;快來了解如何選擇職業賽道吧&#xff01; 方向一…

linux時間校準(ntpdate)

在Linux中&#xff0c;可以使用ntpdate命令來進行時間校準。 首先&#xff0c;打開終端并輸入以下命令安裝ntpdate工具 yum install ntpdate 然后&#xff0c;運行以下命令來同步系統的時間與網絡上的NTP服務器 ntpdate time.nist.gov 若要設置定期自動更新時間&#xff0c;可…

CSS中如何解決 1px 問題?

1px 問題指的是&#xff1a;在一些 Retina屏幕 的機型上&#xff0c;移動端頁面的 1px 會變得很粗&#xff0c;呈現出不止 1px 的效果。原因很簡單——CSS 中的 1px 并不能和移動設備上的 1px 劃等號。它們之間的比例關系有一個專門的屬性來描述&#xff1a; window.devicePix…