C语言结构体指针成员所指向的变量如何访问?

例子typedefstruct{int*p}integer;voidmain{integer*a;intb=1;/*然后如何使a->p指向b?*/}... 例子
typedef struct
{
int *p
}integer;
void main
{
integer *a;
int b=1;
/*然后如何使a->p指向b?*/
}
展开
 我来答
八哥说科技
高粉答主

2019-08-09 · 分享科技资讯,共享科技生活
八哥说科技
采纳数:113 获赞数:78618

向TA提问 私信TA
展开全部

第一种写法:

(*a).p=&b;

.的优先级高于*,(*pointer)两边的括号不能少。如果去掉括号写作*pointer.memberName,那么就等效于*(pointer.memberName),这样意义就完全不对了。

第二种写法:

a->p=&b;

->是一个新的运算符,习惯称它为“箭头”,有了它,可以通过结构体指针直接取得结构体成员;这也是->在C语言中的唯一用途。

结构体是一种数据类型,是一种创建变量的模板,编译器不会为它分配内存空间,就像 int、float、char 这些关键字本身不占用内存一样;结构体变量才包含实实在在的数据,才需要内存来存储。下面的写法是错误的,不可能去取一个结构体名的地址,也不能将它赋值给其他变量。

扩展资料:

用指针引用结构体变量成员方式总结与技巧:

一、(*指针变量名).成员名

注意,*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 这个成员中的内容。

参考资料来源:百度百科-结构体

风若远去何人留
推荐于2018-02-28 · 知道合伙人互联网行家
风若远去何人留
知道合伙人互联网行家
采纳数:20412 获赞数:450121
专业C/C++软件开发

向TA提问 私信TA
展开全部

结构体指针成员所指向变量,这个说法理解起来有点困难。

从字面意思上看断句,有如下几种可能:

首先定义一个包含所有可能情况的结构体:

struct test
{
    int a;
    int *p;
};
struct test t1, *t2;

1 结构体/指针成员/所指向的变量。

结构体中有指针成员,然后要访问这个结构体成员指向的变量值。

那么可以*(t1.p)这种方式对p取值。


2 结构体指针/成员/所指向变量。

这种情况有两种方法可以访问:

*(t2->p)

或者

*(*(t2).p)

效果是一样的。


3 描述有误,实际为:

结构体指针所指向/成员变量。

同样有两种方法可以使用:

t2->p

或者

(*t2).p

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
推荐于2017-11-25
展开全部
因为int是一个值类型的,所以不能直接赋值给p(p是int指针类型)。因此二楼加括号是对的。通过取p的地址转化成对应的指针,然后直接把b赋值给它。另外一种方法:a->p=&b; //把b的地址赋值给a中的p指针。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-07-25
展开全部
a->p=(int *)malloc (sizeof(int));*(a->p)=b;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式