/* 結構體
*/
#include <stdio.h>
#include <malloc.h>
#define STRLEN 128
struct Student
{
char *name; // 指針變量,指向字元,機器32位大小為32bit/8bit = 4Bytes
int age; // 整形變量,4位元組
float score; // 單精度浮點型,4位元組
};
int main(){
int i = 0;
struct Student stu;
for (i = 0; i < 5; i++)
{
printf("輸入學生姓名:");
stu.name = (char *)malloc(sizeof(char)*STRLEN);
/* 很奇怪,上面為什麼要配置設定一塊記憶體空間呢?
如果不配置設定記憶體,在運作的時候可能不會發生任何異常,因為恰好指針指向
的記憶體是該指針有權限(讀和寫)的。
如果運氣不好,指向了一塊隻讀的記憶體比如常量區或者代碼區,将引發緻命
的崩潰!
為了解決這個問題,那就在在使用這個指針之前,為其配置設定記憶體空間,使之
指向一塊有意義的記憶體。
*/
scanf("%s", stu.name);
printf("輸入學生年齡:");
scanf("%d", &stu.age);
printf("輸入學生分數:");
scanf("%f", &stu.score);
printf("學生%d\t 姓名(占記憶體%d):%s\t 年齡(占記憶體%d):%d\t 成績(占記憶體%d): %.2f\n", i,
sizeof(stu.name), stu.name, sizeof(stu.age), stu.age, sizeof(stu.score), stu.score);
free(stu.name);
}
return 0;
}
/* 結構體指針
*/
#include <stdio.h>
#include <malloc.h>
#define STRLEN 128
struct Student
{
char *name; // 指針變量,指向字元,由于我的編譯環境是win32,是以一個指針變量的長度為32bit/8bit = 4Bytes
int age; // 整形變量,4位元組
float score; // 單精度浮點型,4位元組
}stu;
int main(){
enum week{Mon=1, Tus=2, Wes=3, Thr=4, Fri=5, Sat=6, Sun=7};
int day;
scanf("%d",&day);
switch (day)
{
case Mon:
printf("星期一");
break;
case Tus:
printf("星期二");
break;
case Wes:
printf("星期三");
break;
default:
break;
}
int i = 0;
struct Student *p = &stu;
for (i = 0; i < 5; i++)
{
printf("輸入學生姓名:");
(*p).name = (char *)malloc(sizeof(char)*STRLEN);
/* 很奇怪,上面為什麼要配置設定一塊記憶體空間呢?
如果不配置設定記憶體,在運作的時候可能不會發生任何異常,因為恰好指針指向
的記憶體是該指針有權限(讀和寫)的。
如果運氣不好,指向了一塊隻讀的記憶體比如常量區或者代碼區,将引發緻命
的崩潰!
為了解決這個問題,那就在在使用這個指針之前,為其配置設定記憶體空間,使之
指向一塊有意義的記憶體。
*/
scanf("%s", (*p).name);
scanf("%s", p->name);
printf("輸入學生年齡:");
scanf("%d", &((*p).age));
scanf("%d", &p->age);
printf("輸入學生分數:");
scanf("%f", &((*p).score));
scanf("%f", &p->score);
printf("學生%d\t 姓名(占記憶體%d):%s\t 年齡(占記憶體%d):%d\t 成績(占記憶體%d): %.2f\n", i,
sizeof((*p).name), (*p).name, sizeof((*p).age), (*p).age, sizeof((*p).score), (*p).score);
printf("學生%d\t 姓名(占記憶體%d):%s\t 年齡(占記憶體%d):%d\t 成績(占記憶體%d): %.2f\n", i,
sizeof(p->name), p->name, sizeof(p->age), p->age, sizeof(p->score), p->score);
free(p->name);
}
return 0;
}