C语言结构体指针成员所指向的变量如何访问?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言结构体指针成员所指向的变量如何访问?相关的知识,希望对你有一定的参考价值。
例子
typedef struct
int *p
integer;
void main
integer *a;
int b=1;
/*然后如何使a->p指向b?*/
第一种写法:
(*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 这个成员中的内容。
参考资料来源:百度百科-结构体
参考技术A结构体指针成员所指向变量,这个说法理解起来有点困难。
从字面意思上看断句,有如下几种可能:
首先定义一个包含所有可能情况的结构体:
struct testint a;
int *p;
;
struct test t1, *t2;
1 结构体/指针成员/所指向的变量。
结构体中有指针成员,然后要访问这个结构体成员指向的变量值。
那么可以*(t1.p)这种方式对p取值。
2 结构体指针/成员/所指向变量。
这种情况有两种方法可以访问:
*(t2->p)
或者
*(*(t2).p)
效果是一样的。
3 描述有误,实际为:
结构体指针所指向/成员变量。
同样有两种方法可以使用:
t2->p
或者
(*t2).p
参考技术B 因为int是一个值类型的,所以不能直接赋值给p(p是int指针类型)。因此二楼加括号是对的。通过取p的地址转化成对应的指针,然后直接把b赋值给它。另外一种方法:a->p=&b; //把b的地址赋值给a中的p指针。 参考技术C a->p=(int *)malloc (sizeof(int));*(a->p)=b;其实C语言就是三种结构吧?顺序结构、选择结构、循环结构?
是的。
C语言为结构化的语言,C语言有三种结构:顺序结构、选择结构、循环结构。
循环结构又包含当型循环和直到型循环:
1、当型循环:先判断,后执行。最少执行0次。
2、直到型循环:先执行,后判断。最少执行1次。
扩展资料:
结构访问区别
结构体成员依据结构体变量类型的不同,一般有2种访问方式,一种为直接访问,一种为间接访问。
直接访问应用于普通的结构体变量,间接访问应用于指向结构体变量的指针。直接访问使用结构体变量名.成员名,间接访问使用(*结构体指针名).成员名或者使用结构体指针名->成员名。相同的成员名称依靠不同的变量前缀区分。
参考资料来源:百度百科-c语言
参考资料来源:百度百科-当型循环
参考技术AC语言中的语法结构就顺序结构、选择结构、循环结构这3种。
1、顺序结构
顺序结构的程序设计是最简单的,只要按照解决问题的顺序写出相应的语句就行,它的执行顺序是自上而下,依次执行。
2、选择结构
选择结构的执行是依据一定的条件选择执行路径,而不是严格按照语句出现的物理顺序。选择结构的程序设计方法的关键在于构造合适的分支条件和分析程序流程,根据不同的程序流程选择适当的选择语句。
3、循环结构
循环结构可以减少源程序重复书写的工作量,用来描述重复执行某段算法的问题,这是程序设计中最能发挥计算机特长的程序结构,C语言中提供四种循环,即goto循环、while循环、do while循环和for循环。
四种循环可以用来处理同一问题,一般情况下它们可以互相代替换,但一般不提倡用goto循环,因为强制改变程序的顺序经常会给程序的运行带来不可预料的错误。
特别要注意在循环体内应包含趋于结束的语句(即循环变量值的改变),否则就可能成了一个死循环,这是初学者的一个常见错误。
扩展资料:
C语言中三种程序结构及相关语句:
1、判断语句(选择结构)
if 语句:“如果”语句;
if—else 语句:“若…(则)…否则…”语句;
switch 语句:“切换”语句;
switch—case:“切换—情况”语句。
2、循环语句(循环结构)
while 语句:“当…”语句;
do—while 语句:“做…当…(时候)”语句;
for 语句:条件语句(即“(做)…为了…”语句)。
3、跳转语句(循环结构:是否循环)
goto 语句:“转舵”语句,也称“跳转”语句;
break 语句:“中断”(循环)语句,即结束整个循环;
continue 语句:“继续”语句(结束本次循环,继续下一次循环);
return 语句:“返回”语句。
参考资料来源:百度百科-C语言
参考技术B不是的,其实C语言的基本结构并不一定只限于顺序结构、选择结构、循环结构这三种,只要具备基本结构的4个共同特点的都可以作为基本结构。
基本结构的共同特点是:
(1)只有一个入口;
(2)只有一个出口;
(3)结构内的每一部分都有机会被执行到;
(4)结构内不存在死循环。
顺序结构、选择结构、循环结构都满足以上四个特点,用来作为表示一个良好算法的基本单元。
扩展资料
常见的两种循环结构:
1、当型循环:先判断所给条件p是否成立,若p成立,则执行A(步骤);再判断条件p是否成立;若p成立,则又执行A,若此反复,直到某一次条件p不成立时为止。
2、直到型循环:先执行A,再判断所给条件p是否成立,若p不成立,则再执行A,如此反复,直到p成立,该循环过程结束。
参考资料来源:《C程序设计(第三版)》谭浩强 著 清华大学出版社 第2章 程序的灵魂--算法 2.4 怎样表示一个算法
参考技术C 不是C语言只有三种结构,是所有的语言都只存在这三种结构!顺序结构:代码按照编码顺序执行。
选择结构,双称分支结构,细分有单分支,双分支与多分支。单分支只有if结构,还用来做判断。双分支一般指的是if...else结构。多分支一般指的是switch结构,当然多重的if...else也可以实现,同时还是类惟逻辑尺等等编程思想。
循环结构:就是特定条件下要重复执行的语句。一般有步长型for,当型while,直到型do...while(部分语言中是until),以及枚举型foreach(部分语言中是for...in几种。还有几中特殊的直撞调用或间接调用两种形式实现的循环,在部分语言中将其单发为递归结构,但大多数时间由于是函数或方法的调用实现的,不归语言结构范畴,所以虽有递归结构,多数语言中还只认为存在三种基础结构,而递归属于调用层面的结构。所以在死循环时,除了检查我们的循环结构之外,还要特别注意是不是存在的递归调用上的缺少递归条件。本回答被提问者采纳 参考技术D 是的,就只有三种结构
以上是关于C语言结构体指针成员所指向的变量如何访问?的主要内容,如果未能解决你的问题,请参考以下文章