假設(shè)有一個(gè)C程序,需要?jiǎng)?chuàng)建很多結(jié)構(gòu)體來(lái)記錄各個(gè)學(xué)生的信息,然后統(tǒng)一的將這些學(xué)生的信息打印出來(lái)。
例如 例如下述程序創(chuàng)建了A同學(xué)的記錄
#include <stdio.h>t" />
時(shí)間:2023-02-20 04:42:02 | 來(lái)源:建站知識(shí)
時(shí)間:2023-02-20 04:42:02 來(lái)源:建站知識(shí)
C語(yǔ)言使用連接符##來(lái)優(yōu)雅的創(chuàng)建多個(gè)結(jié)構(gòu)體:#include <stdio.h>typedef struct { char name[20]; int age; int score; int grade;}Student;Student A = { "petter", 8, 90, 1,};Student * studentList[] = { &A,};int main(void){ for(int i=0;i<sizeof(studentList)/sizeof(Student *);i++){ printf("name = %s,age = %d,score = %d,grade = %d/r/n", / studentList[i]->name,studentList[i]->age,studentList[i]->score,studentList[i]->grade); } return 0;}
現(xiàn)在人數(shù)變多了,增加了三個(gè)人的數(shù)據(jù)信息,分別是一年級(jí)學(xué)生lucy還有兩個(gè)二年級(jí)學(xué)生nancy和matt。#include <stdio.h>typedef struct { char name[20]; int age; int score; int grade;} Student;Student petter = { "petter", 8, 90, 1,};Student lucy = { "lucy", 8, 100, 1,};Student nancy = { "nancy", 9, 60, 2,};Student matt = { "matt", 9, 55, 2};Student *studentList[] = {&petter, &lucy, &nancy, &matt};int main(void) { for (int i = 0; i < sizeof(studentList) / sizeof(Student *); i++) { printf("name = %s,age = %d,score = %d,grade = %d/r/n", studentList[i]->name, studentList[i]->age, studentList[i]->score, studentList[i]->grade); } return 0;}
這個(gè)時(shí)候我們發(fā)現(xiàn),四個(gè)學(xué)生,聲明結(jié)構(gòu)體的代碼就很長(zhǎng)了,不好看。如果來(lái)了更多的學(xué)生數(shù)據(jù),那豈不是代碼越來(lái)越長(zhǎng)了嗎?多一個(gè)學(xué)生數(shù)據(jù)會(huì)多6行。那么如何用一個(gè)更好的寫法來(lái)優(yōu)雅的解決這個(gè)問題呢?#include <stdio.h>int algorithm_add_op(int num1, int num2) { return num1+num2;}int algorithm_sub_op(int num1, int num2) { return num1 - num2;}#define ALGORITHM(name, num1, num2) / algorithm_##name##_op(num1, num2)int main() { printf("%d/n", ALGORITHM(add, 1, 2)); printf("%d/n", ALGORITHM(sub, 1, 2)); return 0;}
看上述代碼 ALOGORITHM函數(shù)把輸入的子串和algorithm和_op連接起來(lái),使得編譯器調(diào)度到對(duì)應(yīng)二點(diǎn)操作函數(shù)#include <stdio.h>typedef struct { char name[20]; int age; int score; int grade;}Student;#define DECLARE_GRADE_1_AGE_8_STUDENT(name,score) / static const Student Student_##name = { / #name,8,score,1 / };#define DECLARE_GRADE_2_AGE_9_STUDENT(name,score) / static const Student Student_##name = { / #name,9,score,2 / };#define DECLARE_STUDENT(name,age,score,grade) / static const Student Student_##name = { / #name,age,score,grade / };DECLARE_GRADE_1_AGE_8_STUDENT(petter,90)DECLARE_GRADE_1_AGE_8_STUDENT(lucy,100)DECLARE_GRADE_2_AGE_9_STUDENT(nancy,60)DECLARE_GRADE_2_AGE_9_STUDENT(matt,55)Student const * studentList[] = { &Student_petter, &Student_lucy, &Student_nancy, &Student_matt};int main(void){ for(int i=0;i<sizeof(studentList)/sizeof(Student *);i++){ printf("name = %s,age = %d,score = %d,grade = %d/r/n", / studentList[i]->name,studentList[i]->age,studentList[i]->score,studentList[i]->grade); } return 0;}
上述代碼我們定義了一個(gè)宏,這個(gè)宏有兩個(gè)輸入?yún)?shù),作用是創(chuàng)建一個(gè)結(jié)構(gòu)體變量,通過name來(lái)給這個(gè)結(jié)構(gòu)體變量命名,結(jié)構(gòu)體名稱使用到了連接符。關(guān)鍵詞:創(chuàng)建,結(jié)構(gòu),連接,使用,語(yǔ)言
客戶&案例
營(yíng)銷資訊
關(guān)于我們
客戶&案例
營(yíng)銷資訊
關(guān)于我們
微信公眾號(hào)
版權(quán)所有? 億企邦 1997-2025 保留一切法律許可權(quán)利。