C言語の . と -> の違いを詳しく解説

前者はポインタ、前者は構造体変数

a->b最初の意味は である(*a).bため、それらは異なりますが、実際に->は単一の演算子の有無*にかかわらず実装できます。ええと、現代の標準化された C セマンティクスはと の組み合わせ実装できると.言っているのです。->*.

初期の C には、しばらくの間、現代の C とは異なるセマンティクスがありました。

アセンブリについて少し知識のある学生は、機械語コードとアセンブリの観点から、構造体などの変数はなく、レジスタとメモリと呼ばれる大きな配列しかないことを知っているかもしれません。

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

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

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

#include<stdio.h>
#include <malloc.h>
struct stu{
	int  age;
	stu* next;
};
int main(){
	stu *phead = (stu*)malloc(sizeof(stu));//测试代码 
    phead->age=18;
	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 と同等です。"." は一般に "of" と読み、"->" は一般に "of the structure to" と読みます。つまり、構造体では、operator -> は operator * と operator の組み合わせです。

7. "->" は、構造体を指すメンバー演算子です。"." はブレークポイント記号であり、演算子ではありません。

8. "->" は、構造体またはオブジェクトの最初のアドレスを指します。"." は構造体またはオブジェクトを指します。

9. "->" の目的は、ポインターを使用して構造体またはオブジェクトのメンバーにアクセスすることです。"." の使用は、ポインターを使用して構造体またはオブジェクトにアクセスすることです。

おすすめ

転載: blog.csdn.net/weixin_49418695/article/details/123922780