句点在变量和数组之间有什么作用?

问题描述 投票:0回答:1

我正在学习 C 并试图理解什么是句号“。”正在处理变量 x 和 a;这个操作叫什么,它做什么?

这里是完整的代码:

#include <stdio.h>
#include <stdlib.h>

// Create a structure called myStructure
struct T {
    int *a;
    struct T* next;
};
int *y;
int **z;
struct T   x;
struct T*  p1;
struct T*  p2;
struct T** p3;

int main()
{   p1 = (struct T*)malloc(sizeof(struct T));
    p2 = &x ;
    y = (int *) malloc(sizeof(int));
    {int* a[3];
    a[1] = (int *) malloc(sizeof(int));
     z = &a[1];        
     x.a  = *z;                     // point 1
     (*p1).a = *z;                  // point 2
   }             
   (*p1).next = p1;                 // point 3
   p2 = p1;                         // point 4
   p3 = &p1;                        // point 5
   p3 = *(&p3) ;                    // point 6
   p3 = &(*p3) ;                    // point 7
   x.a = y ;                        // point 8
   z = x.a ;                        // point 9
   free(x.a);                       // point 10
}
c pointers struct memory-address period
1个回答
0
投票

.
运算符称为结构/联合成员运算符(奇怪的是,仅以这种方式在索引中引用)。它不适用于数组。
struct T
类型有两个成员
a
next
struct T x;
定义了一个类型为
x
的对象
struct T
,表达式
x.a
表示访问对象
a
的成员
x
。相关的是箭头运算符
->
,它做同样的事情,除了左侧是一个指针,例如
(&x)->a
,或
p1->a

这里是 C17 规范的相关部分,6.5.2.3,p。 59:

后缀表达式后跟 .运算符和标识符指定结构或联合对象的成员。该值是命名成员的值,97)并且如果第一个表达式是左值,则该值是左值。如果第一个表达式具有限定类型,则结果具有指定成员类型的限定版本。

后缀表达式后跟 -> 运算符和标识符指定结构或联合对象的成员。该值是第一个表达式指向的对象的命名成员的值,并且是一个左值。98)如果第一个表达式是指向限定类型的指针,则结果具有该类型的限定版本指定会员

© www.soinside.com 2019 - 2024. All rights reserved.