真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

C語言初階-創(chuàng)新互聯(lián)

我嘗試用這博客記錄下我所熱愛
?我只不過是個無名小輩
?無休止地更新
?在名利中苦苦掙扎
?世事變幻莫測
?就算每一次早早被淘汰
?在失敗邊緣掙扎

創(chuàng)新互聯(lián)是專業(yè)的鹽田網(wǎng)站建設公司,鹽田接單;提供網(wǎng)站設計、成都網(wǎng)站建設,網(wǎng)頁設計,網(wǎng)站設計,建網(wǎng)站,PHP網(wǎng)站建設等專業(yè)做網(wǎng)站服務;采用PHP框架,可快速的進行鹽田網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團隊,希望更多企業(yè)前來合作!

我的數(shù)據(jù)結構與算法系列開始了,有一定C語言基礎的同學可以去學習!

數(shù)據(jù)結構與算法_時間復雜度

有任何問題都可以私信我。

目錄

變量的作用域和生命周期

變量的作用域

變量的生命周期

常量

字面常量const

const修飾的常變量

#define定義的標識符常量

枚舉常量

字符串+轉義字符

字符串

轉義字符

選擇語句

循環(huán)語句


變量的作用域和生命周期 變量的作用域

什么是作用域?

舉個簡單的例子,當我執(zhí)行以下代碼時:

#includeint main()
{
	{
		int a = 100;
		printf("%d", a);
	}
	return 0;
}

可以得到預期的結果:

而當我執(zhí)行下邊的代碼時:

#includeint main()
{
	{
		int a = 100;
	}
	printf("%d", a);
	return 0;
}

會發(fā)現(xiàn)編譯器會報錯:

說明a在{}內(nèi)部可以使用,但出了{}就不能用了。

通俗地講,哪里可以使用它,哪里就是它的作用域。

現(xiàn)在定義一個全局變量,再定義一個函數(shù),看看兩個2022能不能都打印出來。

#includeint g_a = 2022;
void test()
{
	printf("test:%d\n", g_a);
}
int main()
{
	printf("%d\n", g_a);
	test();
	return 0;
}

經(jīng)調(diào)試發(fā)現(xiàn)得到了預期的結果。

過程如下:

如果我們執(zhí)行以下代碼:

#includevoid test()
{
	printf("test:%d\n", g_a);
}
int g_a = 2022;
int main()
{
	printf("%d\n", g_a);
	test();
	return 0;
}

會發(fā)現(xiàn)編譯器會報錯:

要解決問題,在開頭的時候聲明一下就好:

#includeint g_a;
void test()
{
	printf("test:%d\n", g_a);
}
int g_a = 2022;
int main()
{
	printf("%d\n", g_a);
	test();
	return 0;
}

真正定義在后邊,第一個只是聲明。

也可以直接在代碼開頭定義。

要使用變量,一定要先聲明再使用。

全局變量還可以這么用:

新建一個.c源文件,在里邊定義一個變量,能否在一個.c文件中調(diào)用另一個.c文件里的變量呢?

會發(fā)現(xiàn)編譯器會報錯:

這時候就要聲明外部符號了!

在test.c中加上extern int g_a;

#includeextern int a;
int main()
{
	printf("%d\n", a);
	return 0;
}

經(jīng)調(diào)試得到了預期的結果:

所以,全局變量的作用域是整個項目(工程)!

變量的生命周期

什么是變量的生命周期?

變量的生命周期指的是變量的創(chuàng)建到變量的銷毀之間的一個時間段。

在之前我們演示過這樣的代碼的調(diào)用:

#includeint main()
{
	{
		int a = 100;
	}
	printf("%d", a);
	return 0;
}

a并不能在printf中使用。

為什么不能?

就是因為局部變量在進入作用域時創(chuàng)建,一旦出了作用域就會銷毀。銷毀了就不能用了。

本質(zhì)上是在變量創(chuàng)建時向內(nèi)存申請一塊空間,銷毀時把這塊空間還給內(nèi)存。

局部變量的生命周期是:進入作用域生命周期開始,出作用域生命周期結束。

全局變量的生命周期是:整個程序的生命周期。

只要程序還活著,全局變量就可以使用。

常量

會變的值是變量,恒不變的值是常量。

C語言中常量和變量的定義有所差異:

C語言中的常量分為以下以下幾種:

字面常量

const修飾的常變量

#define定義的標識符常量

枚舉常量

這些常量都有自己的特點,要根據(jù)需求去選擇。

字面常量const

字面常量可以這樣定義:

int main()
{
	100;
	'a';
	3.141592653589;
    3.14;
    "hello world";
	return 0;
}

100是整型常量,a是字符型常量,3.141592653589是雙精度浮點型常量,3.14是單精度浮點型常量,hello world是字符串常量。都是字面常量。

const修飾的常變量

為什么叫常變量?是因為它本質(zhì)上是變量,但是不能通過某種方式改變。

這里僅僅點到為止,想仔細了解可閱讀我先前的博客文章http://t.csdn.cn/PdCHE

比如我創(chuàng)建一個變量,在它前面加上const,然后想改變它的值,但發(fā)現(xiàn)編譯器會報錯:

#includeint main()
{
	const int a = 0;
	a = 100;
	printf("%d",a);
	return 0;
}

也就是說,它是變量,但有常量的部分屬性。

#define定義的標識符常量

現(xiàn)在用#define給M定義100

#define M 100

這就是#define標識符常量的定義方法。

執(zhí)行以下代碼,會打印出100

#include#define M 100
int main()
{
	printf("%d",M);
	return 0;
}

枚舉常量

枚舉其實就是一一列舉。

生活中有些值可以一一列舉,如血型、性別、三原色等等。

如果想定義三原色,就要用到enum

#includeenum COLOR
{
	RED,
	GREEN,
	BLUE
};
int main()
{

	return 0;
}

如果我想讓c代表的顏色為紅色,那就需要這樣:

enum COLOR c = RED;

RED、GREEN和BLUE有其相對應的值嗎?

執(zhí)行以下代碼:

#includeenum COLOR
{
	RED,
	GREEN,
	BLUE
};
int main()
{
	printf("%d\n",RED);
	printf("%d\n", GREEN);
	printf("%d\n", BLUE);
	return 0;
}

可以發(fā)現(xiàn)它們的值分別是0、1、2。

更多常量相關的細節(jié)日后再講。

字符串+轉義字符 字符串
“hello world.\n"

這種由雙引號引起來的一串字符稱為字符串字面值,或者簡稱字符串。

注意!字符串的結束標志是一個 \0 的轉義字符。

在計算字符串長度的時候\0是結束標志,不算作字符串內(nèi)容。

如果想存儲一個字符,就要用字符型變量。

如果想存儲多個字符或是字符串,就用到數(shù)組了。

比如,我想存儲hello world,可以這樣定義數(shù)組:

char arr[] = "hello world";

注意,用字符串就要用字符型變量char。

也可以這樣:

char arr[] = { 'h','e','l','l','l','o',' ','w','o','r','l','d','\0' };

這樣存儲字符串時,一定要以\0結尾?。?!

如果去掉\0再去執(zhí)行代碼:

#includeint main()
{
	char arr[] = { 'h','e','l','l','l','o',' ','w','o','r','l','d'};
	printf("%s", arr);
	return 0;
}

會出現(xiàn)“燙”的字樣。

是內(nèi)存太燙了嗎?......

為什么會出現(xiàn)這種情況?

調(diào)試以下代碼,對arr1和arr2進行監(jiān)視:

#includeint main()
{
	char arr1[] = { 'h','e','l','l','l','o',' ','w','o','r','l','d'};
	char arr2[] = "hello world";
	gets();//無實際意義,僅用于不讓程序結束。
	return 0;
}

可以發(fā)現(xiàn)arr2比arr1多了\0。

arr2中的\0是隱藏的、自動補上的,我們看不到但它是實際存在的。而arr1中沒有\(zhòng)0。

這是兩種不同書寫形式帶來的差異。

上文已提到\0是字符串結束的標志。

%s是打印字符串。

在初始化arr1和arr2時會向內(nèi)存分別申請一塊空間,分別存放hello world和hello world\0。

在打印字符串的時候,一直要打印到\0才停止。

由于arr1中沒有\(zhòng)0,那么將繼續(xù)往后打印,與arr1相鄰的內(nèi)存空間中存放的是什么完全不知道,直至遇到\0為止。

所以就會看到亂碼的現(xiàn)象。

如果不想出現(xiàn)亂碼,就要在arr1末尾手動加上\0

另外,計算字符串長度時,\0不算作字符串內(nèi)容。

比如用常用庫函數(shù)strlen(需要引用string.h頭文件):

#include#includeint main()
{
	int length = 0;
	char arr[] = "hello world";
	length = strlen(arr);
	printf("%d", length);
	return 0;
}

strlen統(tǒng)計的是\0之前的字符串的個數(shù)。

轉義字符

在屏幕上打印abcndef

printf("abcndef");

而當我在n之前加上\的時候:

printf("abc\ndef");

此時\n是轉義字符換行符,不再是字符n。

假如我們要在屏幕上打印一個目錄: c:\code\test.c

printf("c:\code\test.c\n");

實際上運行效果是這樣的

這是因為t前邊由于\的存在,t被轉義了。

下邊看一些轉義字符:

看一道筆試題:

int main()
{
    printf("%d\n", strlen("abcdef"));
    printf("%d\n", strlen("c:\test\628\test.c"));
    return 0;
}

程序會輸出什么?

是6和14。

第一行打印很簡單,第二行稍復雜。

首先\t會成為轉義字符,那么接下來是\6成為轉義字符?還是\62成為轉義字符?還是\628成為轉義字符?

是\62,因為根據(jù)上表,\ddd中ddd表示1~3個八進制的數(shù)字。

既然是八進制,那8就不能參與成為轉義字符的一部分了。

為什么不是\6?因為三位之內(nèi)的八進制數(shù)都可以成為轉義字符的一部分。

還有就是,轉義字符不管看起來長多少,都是一個字符的長度。

選擇語句

如果你好好學習,校招的時候拿一個好offer,走上人生巔峰。

如果你不學習,畢業(yè)即失業(yè),回家賣紅薯!

這就是選擇。

如果用C語言表達,是這樣的:

#includeint main()
{
    int input = 0;
    printf("你要好好學習嗎?(1/0)\n");
    scanf("%d",&input);
    if (input == 1)
    {
        printf("好offer");
    }
    else if (input == 0)
    {
        printf("賣紅薯");
    }
    else
    {
        printf("輸入錯誤!");
    }
    return 0;
}

要么打印輸出“好offer”,要么打印輸出“賣紅薯”,要么打印輸出“輸入錯誤!”,不可能兩個或者三個同時執(zhí)行。

C語言中if語句就是選擇語句。

循環(huán)語句

生活中有很多事情需要我們?nèi)諒鸵蝗丈踔聊陱鸵荒甑厝プ?,比如上課、學習。

你一直在學計算機,天天買彩票。

某天你買了張彩票,中了大獎,那你走上了人生巔峰(相對的,因為可能會有人看不上這獎)。

然后就迎娶白富美,學習?學什么習!

如果你天天買彩票都沒中獎,你還會去老實學習,雖然是菜鳥,但是在堅持日復一日地學習。

直到有一天,你成為了大牛,你沒有買彩票中獎,同樣走上了人生巔峰。

C語言中有三種循環(huán),分別是while語句、for語句和do...while語句。

今天只講while語句,其他兩個后期講。

你選擇了好好學習,然后日復一日地敲代碼。

只有在敲夠20000行代碼(有意義的代碼)后才能拿到好offer。

如果你沒有敲夠20000行,就日復一日地敲代碼。

某天你敲夠了20000行代碼,恭喜!你拿到了好offer!

#includeint main()
{
    printf("加入比特\n");
    int line = 0;
    while (line<= 20000)
    {
        line++;
        printf("我要繼續(xù)努力敲代碼\n");
    }
    if (line >20000)
        printf("好offer\n");
    return 0;
}

如果你在學習過程中開始擺爛,沒有敲夠20000行代碼,那就沒有好offer了。

一定要滿足line>20000的條件,否則會提示“好好學習,天天編程”。

#includeint main()
{
    printf("加入比特\n");
    int line = 0;
    while (line<= 20000)
    {
        line++;
        printf("我要繼續(xù)努力敲代碼\n");
    }
    if (line >20000)
        printf("好offer\n");
    else
        printf("好好學習,天天編程");
    return 0;
}

創(chuàng)作不易,碼了五千多字,求各位老鐵三連支持下!

你是否還在尋找穩(wěn)定的海外服務器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調(diào)度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧


本文名稱:C語言初階-創(chuàng)新互聯(lián)
路徑分享:http://weahome.cn/article/hpheh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部