14、結構體的基本使用
阿新 • • 發佈:2018-12-21
結構體的基本使用
#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;
}