-
宏也可以傳遞參數(shù) e.g?#define?N(n)?n*10 int?a=20; int?b=?N(a);// #define?ADD(a,b)?(a+b)?int?ADD(a,b);? 優(yōu)勢:不需要定義輸入?yún)?shù)好返回值的類型 Plus:?預處理中還有條件編譯的功能。
查看全部 -
1.宏替換也出現(xiàn)在預處理中,且不管C的語法,單純?yōu)樽址鎿Q 2.聲明宏用#define 3.宏的作用為聲明反復出現(xiàn)的常量及數(shù)組的buffer {e.g?#define?R?10(注意沒有分號!) int?a?=?R; int?a[M],?B[M]; 或者#define?R?int?main(?,然后輸入M)也行}
查看全部 -
編譯一個程序分為四步驟:.c文件-(預處理)->.i文件-(編譯)->.s文件-(匯編)->.o文件-(鏈接)->可執(zhí)行文件 預處理?分為展開頭文件(#include<stdio.h>)和宏替換 ps.?":s"的作用為跳到文件底部
查看全部 -
按位或 換成1
查看全部 -
你查看全部
-
.為成員運算符,優(yōu)先級最高
查看全部 -
define不遵從C語法,typedef遵從C語法
查看全部 -
【預處理】.c——.i
【編譯】.i——.s
【匯編】.s——.o
【鏈接】.o——可執(zhí)行文件
查看全部 -
vim helleword.c-->gcc helloword.c 編譯的四個步驟(預處理,編譯,匯編,鏈接)
查看全部 -
malloc返回的是開辟空間的首地址,他并不知道你放的是什么類型的東西,所以要用第一個括號中的內容強制轉換指針類型為struct weapon*,和p1的類型轉為一樣,否則會警告指針類型不符合
#include <stdio.h>
?
struct nam
{
? ? char *name[20]; ?//用指針
? ? int old;
? ? float height;
? ? struct nam * next;
};
int main()
{
? ? struct nam a,b, *head;
? ? a.name[0]="李"; ?//第一個地址
? ? a.old=16;
? ? a.height=70.2;
? ? b.name[0]="林";
? ? b.old=21;
? ? b.height=65.3;
? ? head=&a;
? ? a.next=&b;
? ? b.next=NULL;
? ? struct nam *w;
? ? w=head;
? ? while (w!=NULL){
? ? ? ? printf("姓名:%s\n年齡:%d\n身高:%f\n",w->name[0],w->old,w->height); //把地址取出來
? ? ? ? w=w->next;
? ? }
? ? return 0;
}
查看全部 -
#include?<stdio.h>
?typedef
?struct
?weapon{
????
//?這個地方這么定義
????
char
?*name;
????
int
?atk;
????
int
?price;
}weapon_t;
?int
?main()
{
????
weapon_t?weapon1;
????
?????
weapon1.name=
"tom"
;
????
weapon1.atk?=?100;
????
weapon1.price?=?200;
????
printf
(
"%s?%d?%d\n"
,weapon1.name,weapon1.atk,weapon1.price);
????
?????
return
?0;
}
查看全部 -
靜態(tài)數(shù)據(jù)結構:整型,浮點型,數(shù)組等,聲明時要說明長度,且長度固定。
數(shù)組里的元素地址連續(xù),
動態(tài)數(shù)據(jù)結構,如鏈表,空間不定;
head存有指向第一個元素的地址,每個元素都有內容及指向下元素的地址,尾元素地址為空;? ?沒有頭指針即head,整個鏈表都找不到;
靜態(tài)鏈表: (以結構體類型作為節(jié)點元素為例)
struct?weapon?{?int?price;?int?atk;?struct?weapon?*?next;?}; int?main(){ ????struct?weapon?a,b,c,*head; ????a.price=100;?a.atk=100; ????b.price=200;?b.atk=200; ????c.price=300;?c.atk=300; ????head=&a;??a.next=&b;?b.next=&c;?c.next=NULL; ????//下面用指針逐個輸出 ????struct?weapon?*p;?p=head; ????while(p!=NULL){ ????printf("%d,%d\n",p->atk,p->price); ????p=p->next;?//p指向下一節(jié)點的指針內容 ????} ????return?0; }
查看全部 -
typedef 語法特性:
是一種語法,不是一種預處理;
存在作用域;
給自寫的數(shù)據(jù)類型取個好看的類名;
簡化結構體的聲明語句。
查看全部 -
共用體:讓幾個不同類型的變量共享一個地址即內存單元,節(jié)省空間,缺點是同一時刻只能存儲一個變量成員;
union?data{?int?a;??int?b;??char?c;??float?d;?}; //聲明一個共用體變量data; 初始化: union?data?data_1;???data_1.a=10;?data_b='Q';//現(xiàn)在真正起作用的是后一個被賦值的成員,即data_b; 也可以union?data?data_1={'Q'};//這里只能有'Q'一個常量; 共用體的內存長度是其最長成員的長度;
查看全部 -
struct?weapon?*?w;//聲明一個指向struct?weapon類型的指針變量
? ? w=&weapon_1;? ? ? ? ?//讓w指向weapon_1
*w表示w指向的變量weapon_1;
(*w).name即是weapon_1.name,也可以w->name
struct weapon *p;? //聲明一個指向struct weapon變量的指針
p=weapon_2;? ? ? ? //weapon_2是數(shù)組weapon_2[2];此處指向該數(shù)組的第一個也即weapon_2[0];
同樣,也可以p->name或weapon_2[0].name;
若要指向第二個,p++;
查看全部
舉報