プログラミング言語の学習は、難しくもあり、幸せな道でもあります。この道を選んだからには、C言語の基礎知識を理解しながら進みましょう。まず、 C 言語についての一般的な理解が必要です。ご紹介します。 C言語の基礎。
1. C言語とは何ですか。
#include <stdio.h>
int main()
{
printf("Hello\n");
printf("Just do it!\n");
return 0;
}
結果を出力します。
\n があります (これは後で紹介する改行演算子です)
なし\n
2.1 #include <stdio.h> :すべての C 言語プログラム コードにはヘッダー ファイルが含まれています。 include はファイル インクルード コマンドと呼ばれ、その意味は山括弧 <> または引用符 "" で指定されたファイルをプログラムに含めることです。 、このプログラムの一部になります。インクルードされるファイルは通常システムから提供されており、拡張子は.hで、stdioとはStandard input Outputの略で「標準入出力」を意味し、プログラム内で固定の形式で入力することができます。
2.2 int main() : main 関数はプログラムの入り口です。main 関数はプロジェクトに 1 つだけあります。C 言語での main 関数の宣言方法です。int main( の下に {} のペアがあります) )、コードが入力されます。
2.3 printf :出力する結果を示します。結果は (" ") の二重引用符で囲まれます。特定の文字種を特に印刷する必要がある場合、一般的な形式は ("印刷するデータ型\n " ,出力するデータ型(変数)青色の部分は固定形式を表します。緑色の部分は、対応するコンテンツを印刷するときに入力する必要があるさまざまな内容を示します。\n は改行を示します。これはオプションです。印刷結果の形式のみが異なり、印刷コンテンツには影響しません。必要な特定のタイプ印刷される内容を以下に示します。
2.4 return 0 :戻り値は 0 ですが、詳細は説明しませんので、定型文で記録して入力するだけです。
注: 英語入力では、各ステートメントの後にセミコロンを付ける必要があります。
3. データ型
#include <stdio.h>
int main()
{
printf("%d\n", sizeof(char));
printf("%d\n", sizeof(short));
printf("%d\n", sizeof(int));
printf("%d\n", sizeof(long));
printf("%d\n", sizeof(long long));
printf("%d\n", sizeof(float));
printf("%d\n", sizeof(double));
printf("%d\n", sizeof(long double));
return 0;
}
コードでは、%d は整数型を出力し、sizeof() はデータ型のサイズを出力するために使用されます。
結果を出力します。
数値サイズは、さまざまなデータ型のスペース サイズを表します。単位はバイト (バイト) 1GB=1024MB 1MB=1024KB 1KB=1024byte 1 byte=8 ビットです。ビット: はバイナリ データのビットであり、 b と省略され、次のように音訳されます。ビットは、コンピュータのストレージ データの最小単位です。
4. 定数と変数
int age = 150;
float weight = 45.5f;
char ch = 'w';
定義する必要がある変数のタイプ (int、char、float など) を選択し、その変数に対応する変数名を付けます (柔軟に定義できます。たとえば、必要なときに自分の記憶を容易にすることが最善です)値を年齢に割り当てるには、年齢を変数名として使用します)、= を使用して続行します。値を割り当てるときは、通常どおり、値を等号とセミコロンの後に置きます。
4.2 変数の分類
グローバル変数: int main() の外部で定義され、コード全体に有効
ローカル変数:一定の範囲内で{ }で囲まれた領域を定義します。範囲外になると無効になります。グローバル変数とローカル変数が混在する場合は、ローカル変数が優先されます。
#include <stdio.h>
int b = 2020; //全局变量
int main()
{
int b = 2021; //局部变量
int c = 2022; //局部变量
printf("b = %d\n", b);
return 0;
}
結果を出力します。
4.3 変数の使用
2 つの数値の合計を計算する例を見てみましょう
#include <stdio.h>
int main()
{
int num1 = 0;
int num2 = 0;
int sum = 0;
printf("输入两个操作数:>");
scanf("%d %d", &num1, &num2);
sum = num1 + num2;
printf("sum = %d\n", sum);
return 0;
}
2 つの乱数を入力します
コードでは、まず入力する必要がある 2 つのデジタル整数型 int num1=0; int num 2=0 を定義し、初期値 0 を割り当ててから、出力する必要がある値を格納する変数を定義します。 int sum=0; 両方の 0 に初期値を入れます; 最初にプロンプトを出力し、2 つのオペランドを入力します:> scanf ("%d %d", &num1, &num2) を使用して、変数 num1 と num2 のアドレスを見つけて目的を達成します任意の時点で変数に値を代入する場合、 sum=num1+num2 アルゴリズムを定義します。つまり、2 つの数値の合計を求め、変数 sum を使用して結果を引き継ぎ、最後に printf を使用して sum の値を出力します。 。
4.5 定数
C言語では定数と変数の定義形式が異なります。
1. リテラル定数:既知の値
2.const 変更定数変数:割り当てられた変数に固定された効果があり、後で変更することはできません。
#include <stdio.h>
int main()
{
const int num = 4;
printf("%d\n", num);
int num = 8;//此处对num再赋值已经无效了
printf("%d\n", num);
return 0;
}
このうち、const 修飾された定数変数は代入された合計に対して固定の効果を持ち、その後の num への代入は効果がありません。num には固定値が代入されていますが、num の本質は変数であることに変わりはありません。検証は次のとおりです。
#include <stdio.h>
int main()
{
const int n = 10;
int arr[n] = { 0 };//数组[]中需要的是一个常量,虽然const修饰的n有常属性,但是他的本质是一个变量所以有错误
return 0;
}
したがって、出力はありません。
3. #define で定義された識別子定数:定義された識別子はメモリを占有せず、単なる一時的なシンボルであり、プリコンパイル後には存在しなくなります。例: MAX への代入は main 関数の外部で定義されます。
#include <stdio.h>
#define MAX 10
int main()
{
int arr[MAX]={0};
printf(" %d\n", MAX);
return 0;
}
4. 列挙型定数:列挙型定数を 1 つずつ列挙する必要があり、列挙型キーワード enum を使用する必要があります。列挙型に配置されたものを列挙型定数と呼びます。
#include<stdio.h>
enum people
{
KID,
MAN,
WOMAN,
}; //其中KID,MAN,WOMAN,叫做枚举常量
int main()
{
printf("%d\n", KID);
printf("%d\n", MAN);
printf("%d\n", WOMAN);
return 0;
}
5.文字列+エスケープ文字+コメント
#include <stdio.h>
int main()
{
printf("Hello\n");
printf("Just do it!\n");
return 0;
}
エスケープ文字 | 意味 |
\0 | 終了標識 |
\? |
複数の疑問符を続けて書くときに、疑問符が 3 文字の単語に解析されるのを防ぐために使用されます。
|
\' |
文字定数を表すために使用されます
'
|
「 |
文字列内の二重引用符を表すために使用されます
|
\\ |
バックスラッシュを表すために使用され、エスケープ シーケンス文字として解釈されるのを防ぎます。
|
\a |
警告文字、ブザー
|
\b |
バックスペース文字
|
\f |
紙送り文字
|
\n |
改行
|
\r |
入力
|
\t |
水平タブ
|
\v |
垂直タブ
|
\ddd |
ddd は
1 ~ 3 の8 進数
を表します
。例:\130
|
\xdd |
dd は
2桁の 16 進数
を表します
。例: \x30
|
1. まずはエンドマークについてご紹介します\0
#include<stdio.h>
int main()
{
char arr1[] = "bit";
char arr2[] = { 'b', 'i', 't' };
char arr3[] = { 'b', 'i','t', '\0' };
printf("%s\n", arr1);
printf("%s\n", arr2);
printf("%s\n", arr3);
return 0;
}
結果を出力します。
文字列を配列に入れると、デフォルトでは最後に\0が入ります。つまり、配列 char arr1 [ ]={"bit"} には、実際に含まれる内容は 'b', ' になります。 i', 't' , '\0' なのでビットを出力したら終了ですが、array char arr2 [ ]={'b', 'i', 't'} のような単一文字が入力された場合、デフォルトでは末尾に\は入らない0なので、ビットを出力した後、出力は終了せず、いくつかのランダムな値が出力されます。したがって、「熱い、熱い、熱い、熱い、熱い、それ」がいくつかあります。末尾に手動で \0 を入力すると、配列 char arr3 [ ]={'b' のように終了マークを手動で付けることになります。 , 'i', 't', '\0'}、印刷後にビットが \0 に遭遇すると、印刷は終了します。
2. エスケープ文字 \?:疑問符が 3 文字の単語に解析されるのを防ぐために、複数の連続した疑問符を記述するときに使用します。3 文字の単語は、コンパイラの古いバージョンに存在します。
#include<stdio.h>
int main()
{
printf("(are you ok\?\?)\n");// \?在书写连续多个问号时使用,防止他们被解析成三字母词
return 0;
}
結果を出力します。
3. エスケープ文字 \' および \":単に一重引用符と二重引用符を出力するためのもの
#include<stdio.h>
int main()
{
printf("\'");
printf("\"");
return 0;
}
#include<stdio.h>
int main()
{
printf("a\ta");
return 0;
}
出力結果:
#include<stdio.h>
int main()
{
printf("\101\n");
printf("\x42");
return 0;
}
出力結果:
#include<stdio.h>
int main()
{
printf("c:\\test\41\test.c");
return 0;
}
出力結果:
このうち、\t は水平タブ文字と呼ばれ、タブキーのスペース位置に相当しますが、\t をエスケープ文字として認識させないようにするため、\\ をバックスラッシュとして指定します。エスケープ文字として解釈されます。二重否定は肯定とほぼ同じ意味を持ちます。8 進数 \41 は 10 進数 33 に変換され、対応する ASCII コード文字は! 、他の文字はエスケープ文字なしで直接出力されます。
7. エスケープ文字 \a: 警告文字、ブザー
#include<stdio.h>
int main()
{
printf("\a");
return 0;
}
印刷時に「ドンドン」という音が発生します。
8. エスケープ文字 \b: バックスペース文字
#include<stdio.h>
int main()
{
printf("abcdef\b\b\b\b");
return 0;
}
結果を出力します。
\b はバックスペースを意味します。対応する位置に後退すると、対応する文字は印刷されません。バックスペースの場合は重ね合わせ効果があります。上記のコードでは、合計 4 つの \bs が入力され、対応する文字が 4 つ戻ります。入力 abcdef の下から 4 番目の数字 c は印刷されません。
9. エスケープ文字 \f: ページ変更、現在位置を次のページの先頭に移動します。プリンタを使用する場合、ページは直接変更されますが、これはコンパイラでは明らかではありません。
10. エスケープ文字 \v: 垂直タブ文字。印刷時にも使用されます。
11. エスケープ文字 \r: キャリッジ リターン。現在位置をこの行の先頭に移動し、印刷を上書きします。
#include<stdio.h>
int main()
{
printf("abcdef\r");
return 0;
}
結果を出力します。
5.3 注意事項: 1. コード内に不要なコードがある場合は、直接削除するか、コメントアウトしてください。
例として、関数を使用して 2 つの数値の合計を計算します。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int Add(int x, int y)
{
return x + y;
}
/*C语言风格注释
int Sub(int x, int y)
{
return x-y;
}
*/
int main()
{
int a = 0;
int b = 0; //C++注释风格
scanf("%d%d", &a, &b); //用scanf取a,b的地址,能够随机赋值计算
printf("sum=%d\n", Add(a, b)); //调用Add函数,完成加法
return 0;
}
結果を出力します。
6. 選択ステートメント: if ステートメントと switch case ステートメントで実装
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int num = 0;
printf("学习编程\n");
printf("你能够坚持吗?(0不能/1能)");//>:为提示符
scanf("%d", &num);
if (1==num)
printf("好工作,高薪资");
else
printf("平淡的生活");
return 0;
}
7.ループ ステートメント: while ステートメント、for ステートメント、do... while ステートメントを使用して実装されます。
勉強など、毎日やらなければならないことは常に行われなければなりません
たとえば、1 から 100 までの数値を連続して入力するには、while を使用します。
#include<stdio.h>
int main() //代码功能:输出1-100的数字
{
int a = 1;
//int b = 0;
while (a < 101)
{
printf(" %d", a );
a += 1;
}
return 0;
}
結果を出力します。
8. 機能:コードを簡素化し、コードを再利用します。
8.1 ライブラリ関数:基本関数を説明する場合、それらはビジネス コードではありません。C 言語の基本ライブラリは、移植性をサポートし、プログラムの効率を向上させるために、プログラマがソフトウェアを開発しやすいように、一連の同様のライブラリ関数を提供しています。のように:
8.2 カスタム関数:ライブラリ関数ですべてができるのであれば、プログラマは必要ありません。さらに重要なのはカスタム関数です。カスタム関数は、ライブラリ関数と同じ関数名、戻り値の型、および関数パラメータを持ちます。しかし、違うのは、これらを自分たちでデザインするということです。これにより、プログラマーには多くの余地が与えられます。
たとえば、2 つの数値の合計を計算します。
#include <stdio.h>
int main()
{
int num1 = 0;
int num2 = 0;
int sum = 0;
printf("输入两个操作数:>");
scanf("%d %d", &num1, &num2);
sum = num1 + num2;
printf("sum = %d\n", sum);
return 0;
}
関数を使用して 2 つの数値の合計を計算します。
#include <stdio.h>
int Add(int x, int y)
{
int z = x+y;
return z;
}
int main()
{
int num1 = 0;
int num2 = 0;
int sum = 0;
printf("输入两个操作数:>");
scanf("%d %d", &num1, &num2);
sum = Add(num1, num2);
printf("sum = %d\n", sum);
return 0;
}
自己定義関数 int Add(int x, int y) を直接呼び出すため、コードを繰り返し入力する必要がなく、2 つの数値の合計を求める必要がある場合は、関数を直接呼び出すだけです。
9. アレイ
9.1 定義:同じタイプの要素のセット
例: 1 から 10 までの数字を保存するにはどうすればよいですか?
int arr[10] = {1,2,3,4,5,6,7,8,9,10};//定义一个整形数组,最多放10个元素
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
//如果数组10个元素,下标的范围是0-9
配列内の各値に対応する添え字は次のとおりです。
配列内の値を出力します。
#include <stdio.h>
int main()
{
int i = 0;
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
for(i=0; i<10; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
結果を出力します。
10. 演算子: 算術演算子、シフト演算子、ビット演算子、代入演算子
10.1 算術演算子: + - * (乗算記号) / (除算記号) % (剰余)
1. % 演算子に加えて、他のいくつかの演算子が整数と浮動小数点数を演算できます。
2. / 演算子の場合、両方のオペランドが整数の場合は、整数の除算を実行します。浮動小数点数が存在する限り、浮動小数点除算が実行されます。
3. % 演算子の 2 つのオペランドは整数である必要があります。除算後の剰余を返します。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int a = 0;
int b = 1; //对b赋的初始值不能为0,因为在后面要作为除数
int c = (-8 + 22) * a - 10 + b / 2;
int d = a % b;
scanf("%d%d", &a, &b);
printf("计算结果=%d\n", c);
printf("取余=%d\n", d);
return 0;
}
結果を出力します。
10.2 シフト演算子: <<左シフト演算子 >>右シフト演算子
1. シフト演算子のオペランドは整数のみです。
2. 10 進数から 2 進数に変換した後にバイナリ値をシフトすることを目的としています。
3. 左シフト演算子の場合、左側は破棄され、右側は4. 演算子を
シフトする場合、負のビットを移動しないでください。これは標準では定義されていません。
int main()
{
int a = 1;//int型有4个字节32个比特位转化为二进制00000000000000000000000000000001 转化为十进制就为1
int b=a << 2; //00000000000000000000000000000100 转化为十进制就为4
int b=a<<-1;//错误的移位
printf("%d", b);
return 0;
}
結果を出力します。
シフト演算子は 2 進数をシフトするために使用されます。たとえば、上記のコードでは、int 型の 4 バイト = 4x8 = 32 ビットで、対応する整数がまず 32 ビットの 2 進数に変換され、その後 2 進数がシフトされます。ビット コンプライアンス - 左シフト演算子が使用される場合、左側は四捨五入され、右側はゼロで埋められます。右シフト演算子が使用される場合、右側は四捨五入され、左側はゼロで埋められます。最後に、シフトされた 2 進数が 10 進数に変換されて出力されます。
10.3 ビット演算子: & ビットごとの AND | ビットごとの OR ^ ビットごとの XOR (すべてバイナリの場合)
#include<stdio.h>
int main()
{
int a = 1; //0001
int b = 2; //0010
printf("%d\n", a & b); //0000
printf("%d\n", a | b); //0011
printf("%d\n", a ^ b); //0011 相同为0不同为1
return 0;
}
結果を出力します。
10.4 代入演算子: = += -= * = / = &= ^ = |= >>= <<=
オペレーター | 効果 |
! |
論理逆演算
|
- | 負の値 |
+ | 正の値 |
& | アドレスを取得する |
のサイズ | オペランド型の長さ (バイト単位) |
~ | 数値のバイナリ表現のビット単位の否定 |
-- | フロント、リア-- |
++ | フロント、リア++ |
* | 間接アクセス操作料(逆参照操作方式) |
(タイプ) | キャスト |
最初の 5 つの演算子は以前に紹介しましたが、ここでは次の 5 つの演算子だけを紹介します。
1. 2 進数のビットごとの反転~: ~ は 2 進数をビットごとに反転するために使用される単項演算子です。つまり、0 は 1 に変更され、1 は 0 に変更されます。例: 16 進数の 9 は、0x00000009 に対応します。否定され、~9 は 0xfffffff6 に対応します。
#include<stdio.h>
main()
{
int a = 0;
printf("%x", ~a);
}
結果を出力します。
2. Prefix と post++: prefix ++ の役割は、最初に操作を実行してから値を割り当てることですが、postfix ++ は最初にコピーしてから操作を実行することです。
プレフィックス++:
#include <stdio.h>
main()
{
int i = 2;
int a=++i;
int b = i;
printf("a=%d\n", a);
printf("b=%d\n", b);
}
結果を出力します。
コードでは、まず i に初期値 2 を与え、b を使用して i の最終値を反映します。Prefix ++ は、まず 2 に対して +1 演算を実行し、変数 a に 1 を加算した後、値 3 を代入します。つまり、a の値は 3 になります。演算と代入の後、i の値は 3 になるため、i は変更されます。最後の値 3 が b に割り当てられるため、b の値は 3 になります。
ポスト++:
#include <stdio.h>
main()
{
int i = 2;
int a = i++;
int b = i;
printf("a=%d\n", a);
printf("b=%d\n", b);
}
結果を出力します。
コードでは、まず i に初期値 2 を与え、b を使用して i の最終値を反映します。Postfix ++ では、まずi の値 2 を a に代入し、次に i に 1 を加算します。その後、a の値は 2 になります。代入と演算の後、i の値は 3 になるため、変更された i の値 3 は次のようになります。 bに
3. 前置詞、後置詞 --:
接頭辞 --:
#include <stdio.h>
main()
{
int i = 2;
int a = --i;
int b = i;
printf("a=%d\n", a);
printf("b=%d\n", b);
}
結果を出力します。
コードでは、まず i に初期値 2 を与え、b を使用して i の最終値を反映します。事前配置 - 最初に 2 に対して -1 演算を実行し、次に 1 を引いた後の値 1 を変数 a に代入します。つまり、a の値は 1 になります。演算と代入の後、i の値は 1 になるため、i は変更されます。後の値 1 は b に代入されるため、b の値は 1 になります
後置 --:
#include <stdio.h>
main()
{
int i = 2;
int a = i--;
int b = i;
printf("a=%d\n", a);
printf("b=%d\n", b);
}
結果を出力します。
コードでは、まず i に初期値 2 を与え、b を使用して i の最終値を反映します。後置 --最初に i の値 2 が a に割り当てられ、次に i が 1 減算され、a の値は 2 になります。割り当てと演算の後、i の値は 1 になるため、変更された i の値 1が bに
4. 間接アクセス演算料(逆参照演算方式) ※:ポインタによく使われる演算子
#include<stdio.h>
int main()
{
int a = 10;
int* p= &a;
*p =20;
printf("%d\n", a);
return 0;
}
結果を出力します。
このコードを理解するには、まずポインターの概念を理解する必要があります。最初に下にスクロールして、ポインターについて暫定的に理解することができます。コード内の*p=20 ; *は逆参照演算子で、p に格納されているアドレスから p が指すオブジェクトを検索することを意味し、*p は p が指すオブジェクトであり、変数 a を表します。
5. 強制的な型変換 (型):
#include<stdio.h>
int main()
{
double a = 3.14;
printf("%d\n", (int)a);
return 0;
}
結果を出力します。
元々定義されていた変数はdouble型です 強制変換(型)では変数aがint型に変換されます この演算子を使用する場合は変換したい型を括弧内に入れて、変換したい変数を入れてくださいポストカットは 1 つの変数に対してのみ有効です。() の後に変数が 2 つある場合は、その後に続く最初の変数に対してのみ有効です。変換はこのステートメントと他の場所でのみ有効です。変数 a は依然として double 型です。
> | 以上 |
>= | 以上 |
< | 未満 |
<= | 以下 |
!= | 「不平等」をテストするために使用される |
== | 「平等」をテストするために使用されます |
&& | 論理積 |
|| | 論理的または |
11.共通キーワード: C言語には豊富なキーワードが用意されていますが、これらのキーワードは言語自体によってあらかじめ設定されており、ユーザーが自分でキーワードを作成することはできません。
#include(stdio.h)
#define c 100
int main()
{
printf("%d\n", c);
int d = 100;
printf("%d", d);
return 0;
}
打印结果:
12.2 #define 定义宏:
#include<stdio.h>
#define add(x,y)(x)+(y) //宏名 参数 宏体
int main()
{
int a = 10;
int b = 20;
int c = add(a, b); //替换成int c=((a)+(b))
printf("%d", c);
return 0;
}
打印结果:
十三、 指针
13.1 想了解指针需要先了解一下内存:内存是电脑上特别重要的存储器,计算机中程序的运行都是在内存中进行的 。 所以为了有效的使用内存,就把内存划分成一个个小的内存单元,每个内存单元的大小是1个字节。 为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该内存单元的地址。
内存单元有相对应的编号,这一个编号就是地址,这个地址也叫做指针,也就是说地址就是指针,用来储存地址的变量叫指针变量。
如何取出变量的地址呢?就要用到前面介绍的取地址符&
#include <stdio.h>
int main()
{
int num = 10;
#//取出num的地址。注:这里num的4个字节,每个字节都有地址,取出的是第一个字节的地址(较小的地址)
printf("%p\n", &num);//打印地址,%p是以地址的形式打印
return 0;
}
&num的作用就是取出创建的变量num的地址
内存 | |
一个字节 | 0xFFFFFFFF |
一个字节 | 0xFFFFFFFE |
一个字节 | 0xFFFFFFFD |
0x0012FF47 | |
0x0012FF46 | |
0x0012FF45 | |
0x0012FF44 | |
一个字节 | 0x00000002 |
一个字节 | 0x00000001 |
一个字节 | 0x00000000 |
变量num的类型是int类型,其大小为4个字节,红色的部分为num的地址,打印的地址就是读取到num的第一个地址。
变量取出来后如果需要储存,就需要定义指针变量:
int num = 10;
int* p=&num; //int说明指针变量p所指的变量num是一个整形
指针的具体使用:
#include<stdio.h>
int main()
{
int a = 10;
int* p= &a;
*p =20;
printf("%d\n", a);
return 0;
}
打印结果:
#include<stdio.h>
int main()
{
printf("%d\n", sizeof(char *));
printf("%d\n", sizeof(short *));
printf("%d\n", sizeof(int *));
printf("%d\n", sizeof(double *));
return 0;
}
打印结果:
结论:指针大小在32位平台是4个字节,64位平台是8个字节。
#include<stdio.h>
struct xs //定义结构体类型要用struct,这个类型名叫xs(自己定义)
{
char name[20]; //叫做结构体成员,其中要放的是字符串,需要将字符串放到字符串数组里面
int age ;
char sex[10];
char id[15];
};
void project(struct xs* dy) //自定义函数project,将s的地址赋给dy,*dy表示的是s
{
printf("%s %d %s %s\n", (*dy).name, (*dy).age, (*dy).sex, (*dy).id);
printf("%s %d %s %s\n", dy->name, dy->age, dy->sex, dy->id);
}
int main()
{
struct xs s = { "张三", 21 ," 男 ","20209999" };//s为创建的结构体变量,访问其对象时,需要加.这个操作符
printf("%s %d %s %s\n", s.name, s.age, s.sex, s.id);
project(&s); //自定义函数,取s的地址给自定义的函数
return 0;
}
結果を出力します。
構造体の印刷メソッドは上図の 3 つで、project() 関数内にあるものはポインタを使用して印刷し、外側のものはポインタを作成せずに直接印刷します。関数内部の印刷方法は外部のものと大きな違いはありません。
関数外:印刷する場合は、印刷したい型を記入し、最後に構造体変数を記述し、文字列の変数名(名前、年齢、性別、id)をこの形式で印刷します。
関数内: 構造体の変数名をポインタに置き換えます (形式が変わるだけで本質は変わりません) 最後に、演算子「.」を「->」に変更します。