结构体访问成员变量
A. C语言中这个运算符是什么意思-
在C语言中,用于结构成员访问的符号有"`.`"和"->"。这是两种不同的方法,用于访问结构体或类的成员。
当需要访问非指针类型的结构体成员变量时,使用"`.`"符号,例如在上述代码中,`c.a`表示访问结构体变量`c`中的成员变量`a`。
当处理结构体指针时,则需使用"->"符号来访问指针指向的结构体中的成员变量或成员函数。例如,`d->b`表示通过指针`d`访问其指向的结构体中的成员变量`b`。
同样地,无论是使用"`.`"还是"->"符号,都可以应用于访问类的成员。因为结构体能实现的功能,类也都能实现。但是结构体不支持继承和多态性。
在C语言的实现中,`->`和`.`符号分别对应指向操作符和成员访问操作符。例如在上述代码中,`c.f()`是通过`c`访问其成员函数`f()`,而`d->f()`则是通过指针`d`访问其指向的结构体成员函数`f()`。
总结,"`.`"和"->"是C语言中用于访问结构体或类成员的两种符号。它们在语法上有所不同,但在实际应用中,能够实现相似的功能。正确选择和使用这些符号对于编写C语言程序至关重要。
B. C语言结构体指针成员所指向的变量如何访问
第一种写法:
(*a).p=&b;
.的优先级高于*,(*pointer)两边的括号不能少。如果去掉括号写作*pointer.memberName,那么就等效于*(pointer.memberName),这样意义就完全不对了。
第二种写法:
a->p=&b;
->是一个新的运算符,习惯称它为“箭头”,有了它,可以通过结构体指针直接取得结构体成员;这也是->在C语言中的唯一用途。
结构体是一种数据类型,是一种创建变量的模板,编译器不会为它分配内存空间,就像 int、float、char 这些关键字本身不占用内存一样;结构体变量才包含实实在在的数据,才需要内存来存储。下面的写法是错误的,不可能去取一个结构体名的地址,也不能将它赋值给其他变量。
(2)结构体访问成员变量扩展阅读:
用指针引用结构体变量成员方式总结与技巧:
一、(*指针变量饥兄名).成员名
注意,*p 两边的括号不可省略,因为成员运算符“.”的优先级高于指针运算符“*”,所以如果 *p 两边的括号省略的话,那么 *p.num 就等价于 *(p.num) 了。
因为指针变量 p 指向的是结构体变量第一个成员的地址,即字符数组烂棚袭 name 的首地址,所以 p 和 (*p).name 是等价的。
“等价”仅仅是说它们表示的是同一个内存单元的地址,但它们的类型是不同的。指针变量 p 是 struct 型的,而 (*p).name 是 char* 型的。所以在 strcpy 中不能将 (*p).name 改成 p。用 %s 进行输入或输出时,输入参数或输出参数也只能写成 (*p).name 而不能写成 p。
二、直接用:指针变量名->成员名
来代替,它们是等价的。“->”是“指向结构体成员运算符”,它的优先级同结构体成员运算符“.”一样高和启。p->num 的含义是:指针变量 p 所指向的结构体变量中的 num 成员。p->num 最终代表的就是 num 这个成员中的内容。
C. 关于结构体变量成员的引用方式
结构体引用成员变量有两种操作符,即'->'和'.'。
具体使用哪种方式,取决于结构体变量的类型。
以struct test{int a;};
为例,说明如下:结构体指针变量。
定义:struct test *v;访问v中的成员a需要写作v->a。
(3)结构体访问成员变量扩展阅读:
将一个结构体变量中的数据传递给另一个函数,有下列3种方法:
(1) 用结构体变量名作参数。一般较少用这种方法。
(2) 用指向结构体变量的指针作实参,将结构体变量的地址传给形参。
(3) 用结构体变量的引用变量作函数参数。
下面通过一个简单的例子来说明,并对它们进行比较。
例有一个结构体变量stu,内含学生学号、姓名和3门课的成绩。要求在main函数中为各成员赋值,在另一函数print中将它们的值输出。