結構體的初始化和引用及指向結構體變數的指標變數(C語言)
阿新 • • 發佈:2018-12-29
一、首先我們來了解關於結構體以及結構體陣列的概念。
自定義結構體:
struct weapon{
char name[20];
int atk;
int price;
};
它是"weapon"型(類似於我們熟知的int型,String型等),裡面有一個char型別,兩個int型別。
如何給這個結構體賦值以及訪問裡面的屬性?
struct weapon weapon_1 = {"weapon_name",100,200};
printf("%s\n,%d\n",weapon_1.name,++weapon_1.price);
"weapon weapon_1"表示我們例項化了weapon型別的一個具體的物件,我們給它起名為“weapon_1”(型別於int a),並且我們給“weapon_1”賦了三個值{"weapon_name",100,200},這三個值分別對應結構體裡的char name[20],int atk,int price。
完整程式碼如下:
#include<stdio.h>
struct weapon{
char name[20];
int atk;
int price;
};
int main()
{
struct weapon weapon_1 = {"weapon_name",100,200};
printf("%s\n,%d\n",weapon_1.name,++weapon_1.price);
return 0;
}
執行結果:
什麼是結構體陣列?
struct weapon weapon_2[2] = {{"weapon_name1",50,100},{"weapon_name2",100,200}}; printf("%s %d\n",weapon_2[0].name,weapon_2[1].atk);
struct weapon weapon_2[2]中[2]表示這個陣列的大小是2。
完整程式碼如下:
#include<stdio.h> struct weapon{ char name[20]; int atk; int price; }; int main() { struct weapon weapon_1 = {"weapon_name",100,200}; printf("%s %d\n",weapon_1.name,++weapon_1.price); struct weapon weapon_2[2] = {{"weapon_name1",50,100},{"weapon_name2",100,200}}; printf("%s %d\n",weapon_2[0].name,weapon_2[1].atk); return 0; }
執行結果:
二、指向結構體變數的指標變數
先上程式碼:
struct weapon weapon_1 = {"weapon_name",100,200};
printf("%s %d\n",weapon_1.name,++weapon_1.price);
struct weapon * w;
w = &weapon_1;
printf("name = %s name = %s\n",(*w).name,w->name);//w->name weapon_1.name
首先我們先定義一個指向weapon型別的指標變數w,然後讓w指向weapon_1,現在我們可以通過指向結構體變數的指標w去訪問weapon_1。
值得注意的是(*w).name可簡寫成w->name,它們都表示weapon_1.name。
完整程式碼如下:
#include<stdio.h>
struct weapon{
char name[20];
int atk;
int price;
};
int main()
{
struct weapon weapon_1 = {"weapon_name",100,200};
printf("%s %d\n",weapon_1.name,++weapon_1.price);
struct weapon * w;
w = &weapon_1;
printf("name = %s name = %s\n",(*w).name,w->name);//w->name weapon_1.name
return 0;
}
執行結果:
那麼結構體陣列呢?
struct weapon weapon_2[2] = {{"weapon_name1",50,100},{"weapon_name2",100,200}};
printf("%s %d\n",weapon_2[0].name,weapon_2[1].atk);
struct weapon * p;
p = weapon_2;//p->name weapon_2[0].name
printf("%s\n",p->name);
p++;//weapon_2 +1 weapon_2[1]
printf("%s\n",p->name);
可以注意到,“p = weapon_2”中不加“&”。“p = weapon_2”此時表示的是指標p指向的是weapon_2陣列第一個元素的起始地址。
如果我們輸出p->name,實際它表示的是weapon_2[0].name。
如果想訪問weapon_2陣列中第二個元素的name成員,應該如何操作?
我們可以將p進行一個 ++的操作,則可以訪問weapon_2[1].name。
完整程式碼如下:
#include<stdio.h>
struct weapon{
char name[20];
int atk;
int price;
};
int main()
{
struct weapon weapon_2[2] = {{"weapon_name1",50,100},{"weapon_name2",100,200}};
printf("%s %d\n",weapon_2[0].name,weapon_2[1].atk);
struct weapon * p;
p = weapon_2;//p->name weapon_2[0].name
printf("%s\n",p->name);
p++;//weapon_2 +1 weapon_2[1]
printf("%s\n",p->name);
return 0;
}
執行結果: