-
武器信息的單向動(dòng)態(tài)鏈表,在程序執(zhí)行的過(guò)程中逐漸創(chuàng)建節(jié)點(diǎn)
struct weapon * create()//返回值是鏈表的頭指針
{struct weapon * head;//頭指針
struct weapon * p1,*p2;//鏈表當(dāng)前新創(chuàng)建的節(jié)點(diǎn),上一個(gè)節(jié)點(diǎn)
int n=0;//記錄當(dāng)前鏈表個(gè)數(shù)
p1=p2=(struct weapon *)malloc(sizeof(struct weapon));//#include<malloc.h>,malloc分配內(nèi)存塊,sizeof判斷數(shù)據(jù)類(lèi)型的長(zhǎng)度符
head=null;//賦初值
scanf("%d,%d",&p1->price,&p1->atk);
while(p1->price!=0)
{
n++;
if(n==1)head=p1;
else p2->next = p1;//上一個(gè)節(jié)點(diǎn)的next指向創(chuàng)建的新節(jié)點(diǎn)
p2=p1;//創(chuàng)建完成之后更新舊節(jié)點(diǎn)
p1=(struct weapon *)malloc(sizeof(struct weapon));//更新p1
scanf("%d,%d",&p1->price,&p1->atk);
}
p2->next=null;
return (head);
}
struct weapon * p;
p=creat();//p是頭指針,指向第一個(gè)節(jié)點(diǎn)
查看全部 -
靜態(tài)數(shù)據(jù)結(jié)構(gòu)(固定大?。赫停↑c(diǎn)型,數(shù)組,
動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu):鏈表
每一個(gè)節(jié)點(diǎn)包含兩個(gè)部分,一部分是用戶(hù)需要的數(shù)據(jù),一部分是下一個(gè)節(jié)點(diǎn)的地址
鏈表里各個(gè)元素的地址不連續(xù)
struct weapon{
int price;
int atk;
struct weapon *next;//下一個(gè)節(jié)點(diǎn)的信息
};
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){
p->atk,p->price;
p=p->next;
}
a.price=100;
a.atk=100;
查看全部 -
共用體 聯(lián)合體 幾個(gè)不同的類(lèi)型變量使用同一個(gè)內(nèi)存地址,節(jié)省一定的開(kāi)銷(xiāo),同一時(shí)刻只能存儲(chǔ)一個(gè)成員
union data{
int a;
char b;
int c;
}
union data data_1;
data_1.b='c';
data_1.a=10;//起作用
union data data_2={10};
共用體所占的內(nèi)存長(zhǎng)度是它所有成員里所占內(nèi)存最長(zhǎng)的成員長(zhǎng)度
int為4,char為1,union長(zhǎng)度為4
結(jié)構(gòu)體(字節(jié)對(duì)齊,快速讀寫(xiě),空間換取時(shí)間)所占內(nèi)存長(zhǎng)度是最后一個(gè)成員的偏移量加上最后一個(gè)成員的大小加上末尾的填充字節(jié)數(shù)
偏移量是某一個(gè)成員的實(shí)際地址和結(jié)構(gòu)體首地址之間的距離
a偏移量為0,b偏移量為a的大小4
每個(gè)成員相對(duì)于結(jié)構(gòu)體首地址的偏移量是當(dāng)前成員所占內(nèi)存大小的整數(shù)倍,如果不是則填充字節(jié)
c偏移量為a的大小4+b的大小1等于5不能整除c的大小4,所以在b后填充字節(jié)使c的偏移量為8
結(jié)構(gòu)體大小為8+4=12
結(jié)構(gòu)體總大小是不是結(jié)構(gòu)體中內(nèi)存長(zhǎng)度最長(zhǎng)的成員長(zhǎng)度的整數(shù)倍,如果不是填充字節(jié)
12可以整除4,如果不能整除則在c后填充字節(jié)
%lu? ?sizeof(struct data)
共用體變量的地址和成員的地址是同一個(gè)
%p? &data_1.a
查看全部 -
結(jié)構(gòu)體指針
struct weapon *w;
w=&weapon_1;
(*w).name表示指向結(jié)構(gòu)體中的成員()不能省略,.的優(yōu)先級(jí)大于*的優(yōu)先級(jí),w->name
*w表示指向結(jié)構(gòu)體變量
結(jié)構(gòu)體數(shù)組指針
struct weapon *p;
p=weapon_2;
p->name既是weapon_2[0].name
p++既是weapon_2+1,指向了weapon_2[1]
查看全部 -
初始化結(jié)構(gòu)體
struct weapon weapon_1={"weapon_name",100,200};
訪問(wèn)結(jié)構(gòu)體成員,具有所有變量的操作
weapon_1.name
++weapon_1.price
結(jié)構(gòu)體數(shù)組
int a[2]={1,2}
struct weapon weapon_2[2]={"weapon_name1",50,100,"weapon_name2",100,200}
struct weapon weapon_2[2]={{"weapon_name1",50,100},{"weapon_name2",100,200}}
weapon_2[0].name
weapon_2[1].price
查看全部 -
struct 是不同變量類(lèi)型的集合
數(shù)組是相同變量類(lèi)型的集合
struct weapon{
char name[20];
int atk;
int price;
};
struct weapon weapon_1;struct weapon{
char name[20];
int atk;
int price;
}weapon_1;//全局變量
struct {
char name[20];
int atk;
int price;
}weapon_1;//全局變量
查看全部 -
預(yù)處理命令
查看全部 -
動(dòng)態(tài)鏈接查看全部
-
define的作用域是宏定義下面的所有代碼
typedef:關(guān)鍵字,給變量類(lèi)型起別名,預(yù)處理之后不會(huì)被替換,有作用域
typedef int a;(以分號(hào)為結(jié)尾)
typedef int *p;(給int* 起別名叫p)
p q=NULL;//int *q=NULL;
結(jié)構(gòu)體:
typedef unsigned long size_t
struct stu{};
stuct stu XXX;
typedef struct stu{}stu_t;
stu_t XXX;
查看全部 -
#define N(n) n*10
int b=N(a);? ?//int b=a*10;
#define ADD(a,b) a+b
int b=ADD(a,b);? ?//int b=a+b;
int e=ADD(a,b)*ADD(a,b)//預(yù)處理int e=a+b*a+b->執(zhí)行
#define ADD(a,b) (a+b)不要求類(lèi)型
查看全部 -
#define R 10(不要分號(hào))
10作為一個(gè)字符串替換掉R
#define M int main(也可以執(zhí)行,預(yù)處理不考慮語(yǔ)法
反復(fù)使用的常量,數(shù)組buffer(數(shù)組大?。?,便與修改
查看全部 -
.c文件->預(yù)處理->.i文件->編譯->.s文件->匯編->.o文件->鏈接->可執(zhí)行文件
vim helloworld.c創(chuàng)建一個(gè).c文件
gcc helloworld.c編譯文件
gcc -o helloworld.i helloworld.c -E生成一個(gè).i文件,只進(jìn)行預(yù)處理
預(yù)處理:展開(kāi)頭文件,宏替換
查看全部 -
共用體:共用體內(nèi)的各元素分時(shí)占同一個(gè)地址上。
查看全部 -
共用體內(nèi)的數(shù)據(jù)存儲(chǔ)的地址都是同一地址,每一時(shí)刻只能存儲(chǔ)一個(gè)數(shù)據(jù)。共用體的存儲(chǔ)地址長(zhǎng)度是內(nèi)部定義的最長(zhǎng)數(shù)據(jù)類(lèi)型的長(zhǎng)度。而結(jié)構(gòu)體的存儲(chǔ)地址長(zhǎng)度是內(nèi)部各數(shù)據(jù)的長(zhǎng)度的累加(注意:每個(gè)數(shù)據(jù)的偏移量必須是自身長(zhǎng)度的整數(shù)倍,如果不是整數(shù)倍,則填充。如int,char,int,則最后的int的偏移量是int+char=5,則int前需要填充3個(gè)字節(jié)到8個(gè)字節(jié),才為int的整數(shù)倍。如果總長(zhǎng)度不是內(nèi)部長(zhǎng)度最大的整數(shù)倍,則最后一個(gè)的長(zhǎng)度要填充)
查看全部 -
typedef有作用域的問(wèn)題
define沒(méi)有作用域的問(wèn)題
在預(yù)編譯階段 #define段會(huì)把內(nèi)容替換 但typedef并不會(huì)
.i文件是進(jìn)行預(yù)編譯之后生成的文件,一般都是把頭文件包含進(jìn)去,進(jìn)行宏替換這些工作之后生成的文件。
查看全部
舉報(bào)