1.構造タイプ
#include <stdio.h>
struct date {
int year;
int month;
int day;
};
int main() {
struct date today = {
2021, 03, 17};
struct date tomorrow = today;
tomorrow.day = 18;
printf("Today is %i-%i-%i\n", today.year, today.month, today.day);
printf("Tomorrow is %i-%i-%i\n", tomorrow.year, tomorrow.month, tomorrow.day);
return 0;
}
出力:
Today is 2021-3-17
Tomorrow is 2021-3-18
知識のポイント:1。構造は配列とは異なり、その内容はtomorrow.day = 18のように変更でき、配列の内容は変更できません。
構造体関数
前述のように、関数の戻り値は数値であるため、複数の値を返す必要がある場合はポインターを使用します。上記の例を変更してみましょう
2.カスタムデータ型
//case 1
typedef int new_int;
//case 2
typedef struct Adate{
int month;
int day;
int year;
} Date;
//case 3
typedef struct {
int month;
int day;
int year;
} Date;
知識のポイント:typedefは、既存のデータ型の新しい名前を宣言します。
たとえば、ケース1の場合、new_intを使用して、後続のプログラムで整数変数を定義できます。
ケース2は、構造体のAdateタイプのエイリアスを作成することです。その後、Dateを使用してこのタイプを直接定義できます。(struct Adateが型であり、Adateだけが型ではないことに注意してください。したがって、typedefを使用すると、型名が簡略化されます)
ケース3は、型に直接名前を付けます。
3.マクロ定義
マクロとは何ですか?テキストの置換
#define PI 3.14159
#beginningはコンパイル前処理命令、#defineはマクロの定義、PIはマクロの名前、3.14159はマクロの値です。
もちろん、以下に示すように、事前定義されたマクロもあります。
#include <stdio.h>
int main() {
printf("%s\n", __FILE__);
printf("%d\n", __LINE__);
printf("%s\n", __DATE__);
printf("%s\n", __TIME__);
return 0;
}
出力結果
E:\dustbin\array.c
7
Mar 17 2021
20:40:54
関数のようなマクロを定義することもできます
#include <stdio.h>
#define cube(x) ((x)*(x)*(x))
int main() {
printf("%d\n", cube(5));
return 0;
}
cube(5)は5 * 5 * 5に置き換えられます。ここでの置き換えはテキストの置き換えであるため、置き換え後の操作の優先順位を考慮する必要があります。(xを書く代わりにxに括弧を追加することをお勧めします。 * x * x)