【C言語】-- .と->の使い方の違い

C 言語では、構造体(struct) は、異なる型の複数のデータ メンバーを含めることができるユーザー定義のデータ型です。「.」と「->」の違いは次のとおりです。

1. 「.」演算子は、構造体変数のメンバー、つまり構造体変数のメンバー変数またはメンバー関数にアクセスするために使用されます。例えば:

struct Student {
   char name[10]; 
   int age; 
}; 
struct Student s;
s.age = 20; 

構造体変数 s の age メンバー変数にアクセスし、その値を 20 に設定することを示します。


2.  "->" 演算子は、構造体ポインタ内のメンバ (構造体ポインタ変数が指すメンバ変数または構造体変数のメンバ関数) にアクセスするために使用されます。例えば:

struct Student { 
    char name[20]; 
    int age;
};
struct Student *p = &s;
p->age = 20;

構造体ポインタ変数 p が指す構造体変数 s 内の age メンバ変数にアクセスし、その値を 20 に設定することを示します。「->」演算子を使用する場合は、ポインタ変数が最初に有効な構造体変数を指している必要があることに注意してください。そうしないと、プログラム エラーが発生します。
 

由于a->b 意味は (*a).b なので違いますが、 使用 ・ 実装-> は可能です  。*.

構造体変数は、次のように . を使用して構造体のメンバーにアクセスします。

#include<stdio.h>
#include <malloc.h>
struct stu{
	int  age;
	stu* next;
};
int main(){
	stu s1;
    s1.age =20;
	
	return 0;
}

構造体へのポインターは、次のように -> を使用して、それが指す構造体のメンバーにアクセスします。

#include<stdio.h>
#include <malloc.h>
struct stu{
	int  age;
	stu* next;
};
int main(){
	stu *phead = (stu*)malloc(sizeof(stu)); 
    phead->age=20;
	phead->next = NULL;
	stu* p = phead;
	
	return 0;
}

要約は次のとおりです。 
1. A->a は、A が構造体へのポインタであることを意味します。
2. Aa は、A が構造体であることを意味します。
3. A->a は (*A).a と同等です。

4. AB の場合、A はオブジェクトまたは構造体です。

5. A->B の場合、A はポインタ、-> はメンバ抽出、A->B は A のメンバ B、A はクラス、構造体、または共用体へのポインタのみにすることができます。

6. (*a).b は a->b と同等です。「.」は通常「の」と読み取られ、「->」は通常「指定された構造の」と読み取られます。つまり、この構造では、演算子 -> は演算子 * と演算子 の組み合わせです。
7. 「->」は、構造体またはオブジェクトの最初のアドレスを指します。「.」は構造体またはオブジェクトを指します。

おすすめ

転載: blog.csdn.net/m0_73381672/article/details/131316235