說明:我是一個初學c語言的小白,很多地方都不是很理解,所以就會自己動手敲代碼進行相應的推理驗證,希望可愛的你在看到這些步驟時,不要嫌棄我啰嗦,(比如吐槽:這作者咋這樣呀,這么簡單的還要敲代碼驗證,真菜呀!…我:好吧,我不裝了,我攤牌了,我確實菜,真的菜,咋滴啦,還不允許初學者菜呀!)
1.第一個c語言程式
#include<stdio.h>
int main()
{
printf("hello world!\n");
return 0;
}
//所有的c語言程式都有相同的一個框架
int main()
{
//這里是程式執行的具體內容
return 0;
}
int 表示整型,跟后面return 0相呼應,
main()是我們的一個主函式,所有程式有且僅有一個主函式,如果不滿足這個條件的時候,代碼運行就會報錯,
printf指的是列印函式, print(列印)f-- - function(函式),這個是c語言庫函式中的一個函式,在stdio中,不在當前所寫的函式里面,所以需要#include<stdio.h>參考頭檔案stdio.h,
結果展示:說明:vs2019中多了檔案路徑的這句話

2.資料型別
我們生活中有很多不同型別的資料,比如年齡22歲,身高171.33cm,名字“小明”等等,要記錄不同型別的資料,我們就需要不同的資料型別的變數來向記憶體申請空間,例如:
int age = 22;
char ch = ‘A’;
float height = 171.33;
double weight = 145.11;
常用的資料型別有7種:char / int / short / long / long long / float / double
列印輸出不同型別的變數需要用到不同的轉義字符
例如列印
char型別的常用------ % c 字符型別 % s 字串型別
int\short\long\long long ------ % d 整型十進制
float ------ % f 單精度浮點型十進制
double ------ % lf 雙精度浮點型十進制
% p-- - 以地址的形式列印
不同的資料型別所占用的記憶體空間是不一樣的,這也是為什么整型有int / short / long / long long 之分,合理的使用不同型別,可以節省記憶體空間,我們可以使用sizeof(資料型別); 來計算每種型別的空間大小,
sizeof本質是一種單目運算子,不是函式,所以不需要額外參考頭檔案,
#include<stdio.h>
int main()
{
char ch;
int a;
short b;
long c;
long long d;
float f;
double lf;
printf("Length of char:%d\n", sizeof(char));
printf("Length of int:%d\n", sizeof(int));
printf("Length of short:%d\n", sizeof(short));
printf("Length of long:%d\n", sizeof(long));
printf("Length of long long:%d\n", sizeof(long long));
printf("Length of float:%d\n", sizeof(float));
printf("Length of double:%d\n", sizeof(double));
printf("Length of &char:%d\n", sizeof(&ch));
printf("Length of &int:%d\n", sizeof(&a));
printf("Length of &short:%d\n", sizeof(&b));
printf("Length of &long:%d\n", sizeof(&c));
printf("Length of &long long:%d\n", sizeof(&d));
printf("Length of &float:%d\n", sizeof(&f));
printf("Length of &double:%d\n", sizeof(&lf));
return 0;
}
結果展示:

通過這個結果我們可以看到:

計算機是硬體-- - 通電 正電 1 負電 0
計算機中的存盤單位
bit-- - 位元位 1
byte-- - 位元組 = 8bit 10000001
kb-- - 千位元組 = 1024byte
mb-- - 兆位元組 = 1024kb
gb-- - 吉位元組 = 1024mb
tb-- - 太位元組 = 1024gb
pb-- - 拍位元組 = 1024tb
3.變數
生活中有一些值是不變的,比如圓周率,性別,血型,身份證號
有些值則是可變的,比如年齡,體重,薪資,時間等
不變的值,c語言用常量來描述,變化的值,用變數來描述,
①變數定義的方式:型別 變數名 = 初始值; 例如:
int age = 24;
char ch = 'A';
float height = 176.14;
②變數的型別:區域變數、全域變數
int num1 = 20;//全域變數,定義在代碼塊({})之外的變數
int main()
{
int num2 = 10;//區域變數,定義在代碼塊({})之內的變數
return 0;
}
③當區域變數與全域變數名稱相同的時候,區域變數優先
#include<stdio.h>
int a = 100;
int main()
{
int a = 10;
printf("%d\n", a);
return 0;
}

#include<stdio.h>
int a = 100;
int main()
{
//int a = 10;//區域變數與全域變數名稱相同時,區域變數優先
printf("%d\n", a);
return 0;
}

下面再看這個例子:

將printf函式放到{}里面去

提示:main函式內部的變數一定是區域變數,但區域變數的作用范圍不一定是main函式內部,而是區域變數所在的區域區域,
④變數的使用
計算兩個數的和 num1 num2,從鍵盤輸入接收數值,求和后列印出來,具體代碼如下:

我們看到這時候代碼運行報錯,這時候別著急,這個跟c語言使用方式有關,c語言語法規定,變數要定義在當前代碼塊的最前面,調整后我們可以得到:

出現了一個新的錯誤,描述scanf函式unsafe,這個時候我們在頭檔案上方添加#define _CRT_SECURE_NO_WARNINGS 1 即可解決這個問題,(后面這個問題會單獨出一篇文章分析講解)

⑤變數的作用域和生命周期
作用域:程式設計概念,通常來說,一段程式代碼中所用到的名字并不總是有效 / 可用的,而限定這個名字的可用性的代碼范圍就是這個名字的作用域
簡單來說:變數起作用的范圍就是其作用域,
1)區域變數的作用域是變數所在的區域范圍
2)全域變數的作用域是整個工程,
例如:num1 起作用的范圍就是{ } 的范圍,printf函式在這個函式內,所以可以正常列印輸出,

如果num1的位置發生變化,放到小括號{}中,其作用域為黃框范圍,此時printf函式在作用域之外,不能正常進行列印輸出,

全域變數的作用域整個工程
1)同.c源檔案中

2)不同.c源檔案中,用extern來宣告外部變數


生命周期:變數的生命周期指的是變數的創建到變數的銷毀之間的一個時間段,
(變數什么時候存在、什么時候銷毀、什么時候結束、什么時候起作用)
1)區域變數的生命周期是:進入作用域生命周期開始,出作用域生命周期結束,
2)全域變數的生命周期是:整個程式的生命周期,
彩蛋:
scanf()函式不安全的原因分析
int main()
{
char arr[5] = { 0 };
scanf("%s", arr);
printf("%s \n", arr);
return 0;
}
這里定義的是一個包含5個字符的陣列,通過鍵盤輸入,運用scanf函式輸入的時候,我們可以輸入并列印出超過5個字符的陣列,堆疊空間被破壞了,陣列就越界訪問了,這個時候就會報error錯誤,
scanf讀取的時候沒有考慮到陣列的實際大小,不管輸入的內容陣列是否放不放的下,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/271982.html
標籤:其他
上一篇:空杯心態 重新啟程
下一篇:21中科大軟體學院上岸經驗帖
