1. 程式人生 > >14、結構體的基本使用

14、結構體的基本使用

結構體的基本使用
#include <stdio.h>
#include <string.h>

//定義一個結構體型別
//1、struct是關鍵字
//2、合起來才是結構體型別
//3、結構體內部定義的變數不能直接賦值
//4、結構體只是一個型別,沒有定義變數前,就是沒有分配空間。沒有空間,就不能賦值
struct Student
{
	int age;
	char name[50];
	int score;
};//有分號

int main(int argc, char const *argv[])
{
	//定義結構體變數
	//1、型別名 變數名
	struct Student stu;//別忘了struct關鍵字
//結構體變數初始化,和陣列一樣,要使用大括號 //2、只有在定義時才能初始化 struct Student stu2 = {18, "mike", 59}; //3、使用結構體成員,不能直接使用,需要藉助結構體變數來引用 struct Student tmp; //如果是普通變數,使用.運算子 tmp.age = 18; //tmp.name = "mike";//name成員是陣列名,陣列名是常量,不能修改 strcpy(tmp.name, "mike"); tmp.score = 59; //如果是指標變數,使用-> //如果是指標,指標有合法指向,才能操作結構體成員 struct
Student *p; p = &tmp;//注意要有合法的指向,不然就是野指標 p->age = 18; strcpy(p->name, "mike"); p->score = 59; //任何結構體變數都可用 . 或 -> 操作成員 (&tmp) -> age = 18; //.這裡需要加括號的原因,因為 . 的優先順序比 * 高。 //如果不加括號,會導致先執行p.age 再執行 * (*p).age = 18; p[0].age = 18; return 0; }

在這裡插入圖片描述

在這裡插入圖片描述

#include <stdio.h>

struct
Student { int age; char name[50]; int score; }; //在定義結構體的同時定義了全域性變數s1,s2 struct Student { int age; char name[50]; int score; }s1 = {18, "mike", 59},s2; //匿名結構體,定義結構體的同時定義了全域性變數s3,s4 //但是由於匿名結構沒有名字,所以只能使用一次 struct { int age; char name[50]; int score; }s3,s4; int main(int argc, char const *argv[]) { printf("%d, %s, %d\n", s1.age, s1.name, s1.score); return 0; }