說明:我是一個初學c語言的小白,很多地方都不是很理解,所以就會自己動手敲代碼進行相應的推理驗證,希望可愛的你在看到這些步驟時,不要嫌棄我啰嗦,(比如吐槽:這作者咋這樣呀,這么簡單的還要敲代碼驗證,真菜呀!…我:好吧,我不裝了,我攤牌了,我確實菜,真的菜,咋滴啦,還不允許初學者菜呀!)
EOF-- - end of file 檔案結束標志 值: - 1
提示:本小結是初始C語言最后一小部分內容,之后會有一個初始C語言總結的文章,包含初始C語言(1)(2)(3)復習專用的思維導圖,一些用于編程練習的case,以及個人的學習心得及總結(小白專用),
11.常見關鍵字-- - 32個

注意:定義的變數名稱不能和關鍵字相同,
特殊說明:regiter 暫存器 cpu快速訪問 register int a = 10;
struct 結構體關鍵字 union 共用體關鍵字
typedef 型別重定義 typedef unsigned int u_int;
重點詳解:static 在c語言中,staic是用來修飾變數和函式的
1)修飾區域變數 - 靜態區域變數
static修飾區域變數改變了變數的生命周期,讓靜態區域變數出了作用域依然存在,到程式結束,生命周期才結束,


F10 進行除錯 需要進入回圈體或者函式體的時候按F11(Fn + F10 、Fn + F11)
拓展說明:static修飾區域變數改變區域變數的生命周期(本質上是改變了變數的存盤型別,從堆疊區-- > 靜態區)

2)修飾全域變數 - 靜態全域變數
一個全域變數被static修飾,使得這個全域變數只能在本源檔案內使用,不能在其他源檔案內使用,(本質上改變了全域變數的鏈接屬性,從外部鏈接屬性變成內部鏈接屬性)


用static修飾后


3)修飾函式 - 靜態函式
一個函式被static修飾,改變了函式的鏈接屬性,使得這個函式只能在本源檔案內使用,不能在其他源檔案內使用,(本質上改變了函式的鏈接屬性,從外部鏈接屬性變成內部鏈接屬性)


使用static修飾函式后


#define定義常量和宏
①#define定義識別符號常量 #define Max 100
②#define定義宏 #define Max(x,y) (x > y ? x : y)

拓展:什么是宏?為什么說#define定義的識別符號常量和宏是字符的簡單替換?
①計算機科學里的宏是一種抽象(Abstraction),它根據一系列預定義的規則替換一定的文本模式,解釋器或編譯器在遇到宏時會自動進行這一模式替換;
② 當我們使用 #define Add(x,y) x+y
計算 4 * Add(2,3) 運算式的時候,猜猜結果是多少,是4 * 5=20嗎? 實際上 應該是4 * 2+3=11,看懂這個例子應該就能明白為什么說是字符的簡單替換了!
12.指標
要想弄懂指標的概念,首先要明白記憶體的含義

簡單理解:地址就是對記憶體空間有效利用的一種編號方式類似于我們現實生活中將空間進行編號(比如全球劃分為七大洲、中國劃分為34個省份(包含臺灣省)等),存盤這些地址資訊的變數我們賦予其特殊的型別—指標(專門存放地址的變數,本質上還是變數,是變數就會有存盤空間,也就有其對應的地址,也就是說指標本身也有對應的地址,雖然指標本身的內容也是存放地址資訊的,),地址的大小跟編號的方式有關,32位平臺有32根地址線(現實中物理的線),所以可以存盤32個bit=4個位元組 地址資訊,所以地址的大小是4個位元組,64位平臺有64根地址線,地址大小是8個位元組,
% p 列印地址
對于32位平臺,有32根地址線,所以其地址對應bit的個數為32 位元組長度為4 所以32位平臺的指標的長度均為 4個位元組
對于64位平臺,有64根地址線,所以其地址對應bit的個數為64 位元組長度為8 所以32位平臺的指標的長度均為 8個位元組
32位平臺:

64位平臺:


指標定義的方式 型別變數 * 指標變數名 = &變數名;
例如 int a = 10;
int* p = &a; //注意指標變數名為 p,而不是p
char ch = ‘a’;
char pc = &ch;
利用指標找到對應變數的方式 解參考運算子*
例如 int a = 10;
int* p = &a;
*p = 20; //實際上就是 a = 20;
13.結構體
在描述一些復雜的物件時,我們往往要從多個方面,多個角度來描述,這個時候我們就需要利用結構體型別了,結構體型別是一種自定義型別,其關鍵字為 struct
定義方式:struct 結構體型別名稱
{
型別 結構體成員1;
型別 結構體成員2;
……
}
初始化定義結構體變數的方式為:
struct 結構體型別名稱 結構體變數名 = { 成員1賦值,成員2賦值…… }
#include<stdio.h>
//定義一個結構體型別
struct Book
{
char name[20];
int price;
};
int main()
{
//新建一個結構體Book型別的變數
struct Book b1 = { "c語言程式設計",15 };
printf("書名:%s\n", b1.name);
printf("價格:%d\n", b1.price);
return 0;
}

對于結構體變數,也可以進行相應的操作,如更改其成員的值,定義相應的指標等等,

#include<stdio.h>
//定義一個結構體型別
struct Book
{
char name[20];
int price;
};
int main()
{
//新建一個結構體Book型別的變數
struct Book b1 = { "c語言程式設計",15 };
struct Book* pb = &b1;
printf("書名:%s\n", b1.name);
printf("價格:%d\n", b1.price);
printf("書名:%s\n", (*pb).name);
printf("價格:%d\n", (*pb).price);//. 結構體變數.成員
printf("書名:%s\n", pb->name);// -> 結構體指標->成員
printf("價格:%d\n", pb->price);
b1.price = 20;
printf("修改之后的價格為:%d\n", b1.price);
pb->price = 25;
printf("第二次修改之后的價格為:%d\n", b1.price);
(*pb).price = 30;
printf("第三次修改之后的價格為:%d\n", b1.price);
return 0;
}

要想修改書名 想通過b1.name = { “c++” }是行不通的,那為什么b1.price可以變化呢,這是因為price是一個變數 而 name是一個陣列
這個時候可以通過strcpy()函式來實作書名的更改,strcpy-- - string copy 字串拷貝 strcpy(b1.name, “c++”); 頭檔案為 string.h

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/273772.html
標籤:其他
