2 變數的作用域和常量

2021-10-25 10:44:36 字數 3382 閱讀 9191

變數的作用域1

按作用域劃分:變數分區域性變數和全域性變數

區域性變數

處於**塊2

中的變數就是區域性變數,生命週期伊始於左半括號開始直到右半括號結束變數生命週期結束空間被釋放

全域性變數生命週期伴隨整個程式起始到結束

4種常量

字面常量

浮點型別字面常量3

3.14

帶f的浮點數,型別是float4

3.14f

整數字面常量5

字元字面常量6

『c』字串字面常量

「hello」

const 修飾的常變數

定義舉例:

const int var = 998;
被const修飾的變數的值不能賦值改值,但是可以通過指標改變如下:

擴充套件:const修飾指標常見的三種情況const位於*前面

const int* ptr;(等價於:int const * ptr;)

ptr指標變數指向的記憶體空間,其值不能被修改

const位於*後面

int* const ptr;

ptr不能重新指向新的變數空間

const同時位於*前面和後面

const int* const ptr;

ptr指標變數指向的記憶體空間,其值不能被修改且ptr不能重新指向新的變數空間

#define 定義的識別符號常量

#define關鍵字是特別實用的乙個c語法特徵,巨集替換以及巨集定義類似函式功能

如果乙個數字在當前原始碼**現次數很多,那麼可以用巨集定義來表示,以後對**中大量出現的變數進行修改也有極大的方便

列舉常量

實用enum關鍵字以及{}進行定義

例子:

enum ***;
列舉的元素預設都是int型別的,列舉的第乙個元素預設從0開始,也可以對單個元素進行賦值進行初始化

總結:只有define的常量和列舉常量可以用於初始化陣列元素個數

define的常量初始化陣列元素個數

#include #define num 8

int main() ;

printf("%d\n", *(arr+2));

printf("%d\n", sizeof(arr)/4);

return 0;

}

const修飾的變數嚴格意義上講應該叫做常變數,是不能用於宣告陣列的元素個數

const int num = 10;

int arr[num];

以上**會報錯,原因是:num的值是在執行階段才有值的,而在編譯階段無法獲取值的,因此編譯階段編譯器就不知道給陣列開闢多大的空間

列舉常量是可以用於陣列元素個數的初始化的

#include enum ;

int main() ;

printf("%d\n", arr[3]);

return 0;

}

字元陣列

兩種定義方式

char arr1=;

char arr2="abc";

以上兩種初始化是有3點區別:

arr2宣告的字元陣列有四個元素,因為字串字面常量結尾預設有乙個』\0』結束標誌符

sizeof(arr1)=3,sizeof(arr2)=4

strlen(arr1)的結果是隨機值,strlen(arr2)=3 7

陣列部分初始化:

char arrchar[6] = ;
部分初始化的陣列,未給初始值的元素預設是0

陣列如果初始化,可以不指定陣列的大小

int arrint = ;
總結:c語言中並沒有字串這種變數型別,我們平時使用的實際是字元陣列,由於是第二種初始化方式因此結尾都會有結束標誌』\0』,使用字元陣列的名字去列印字串也是列印到結束標誌』\0』為止,給人一種本身就是字串的錯覺,其實質上是陣列

轉義字元

反斜槓\用於與普通字元組合表示特殊字元

注意以下組合字元都表示乙個字元,注意表示乙個反斜槓\要使用』\』

特殊字元

釋義\?

在書寫連續多個問號時使用,防止他們被解析成三字母詞

\』用於表示字元常量』

\"用於表示乙個字串內部的雙引號

\\用於表示乙個反斜槓,防止它被解釋為乙個轉義序列符。

\a警告字元,蜂鳴

\b退格符

\f進紙符

\n換行

\r回車

\t水平製表符

\v垂直製表符

\ddd ddd表示1~3個八進位制的數字 8

。 如: \130

\xdd dd表示1~2個十六進製制數字 9

。 如: \x30 (大寫x代表16進製制的字母大寫)

示例:strlen("\618") -->結果是2

』\61』是乙個字元

strlen("\6131") -->結果是2

』\613』是乙個字元

strlen("\x61") -->結果是1

strlen("\xff") -->結果是1

strlen("\xf") -->結果是1

strlen("\xfg") -->結果是2

』\xf』是乙個字元

c語言兩種注釋風格:

單行注釋(c++):

//******xx內容

多行注釋(不支援巢狀,前半注釋符只與後文第乙個後半注釋符閉合):

/* ******xx內容 */

變數只能在其生命週期內訪問 ↩︎

使用{}括起來的乙個部分就是乙個**塊 ↩︎

預設是double型別 ↩︎

float和double的精度是不同的,float32位,double64位 ↩︎

預設是int型別 ↩︎

預設是char型別, 計算機起源於歐美國家因此最早的字符集是ascii,除此之外還有相容各個國家字元的字元編碼unicode以及各國自己規定的字符集 ↩︎

strlen函式位於stdlib標頭檔案中,作用是計算字串長度 ↩︎

注意d的取值 < 8 ↩︎

注意d的取值 <= f ↩︎

變數 常量 作用域

變數的注意事項 1.每個變數都有型別,型別可以是基本型別,也可以是引用型別。2.變數名必須是合法的識別符號。3.變數宣告是一條完整的語句,每乙個宣告都必須以分號結束。變數的作用域 類變數 例項變數 區域性變數 例子 public class demo 類變數 static static double...

變數 常量 作用域

變數可分為四種,類變數,例項變數,區域性變數,塊級變數。區域性變數使用前必須初始化 賦值 類 例項變數,不賦值的話,會預設賦初始值。引用型別初始值是null,數字型別初始值是0,布林值預設是false,char是 u0000。常量,就是初始化之後不會變化的量,通常在程式中定義一些常值。常量定義時也必...

變數常量作用域

變數是什麼 就是可以變化的量 j a是一種強型別語言,每個變數都必須宣告其型別 j a變數是程式中最基本的儲存單元,其要素包括變數名,變數型別和作用域 每個變數都有型別,型別可以是基本型別,也可以是引用型別 變數名必須是合法的識別符號 變數宣告是一條完整的語句,因此每乙個宣告都必須以分號結束 pub...