1、指向结构体的指针变量:

C 语言中->是一个总体,它是用于指向结构体,如果我们在程序中定义了一个结构体,然后声明一个指针变量指向这个结构体。那么我们要用指针取出结构体中的数据。就要用到指向运算符“->”.

 

 

举例说明: 

struct SunLL

{

  int a; 

  int b; 

  int c;

};         

 

struct SunLL  * p;               //定义结构体指针

struct SunLL A = {1,2,3};    //定义一个SunLL类型的变量A

 

int x;                                //定义一个变量x

p = &A ;                          //让p指向A

x = p->a;                       //等价于  x=(*p).a         (*p)表示p指向的结构体变量 

                               //这句话的意思就是取出p所指向的结构体中包括的数据项a赋值给x

//因为此时p指向A。因而 p->a == A.a,也就是1

 

2、指向结构体数组的指针变量: 

指向结构体的指针变量也能够指向结构体数组及其元素。

 

 

假设程序例如以下: 

struct SunLL *p,sun[3]; 

p = sun; 

假设假定sun[0]的地址是1000。指针变量p指向结构体数组sun的首地址,因为size of(struct SunLL)的值是6。每一个结构体元素占内存空间6个字节,因此p+1指向地址1006。p+2指向地址1012. 

 

使用指针变量指向结构体变量或结构体数组时,应注意运算符的优先级,在c语言中"()" "[ ]" "->" "."四个优先级同样,具有最高的优先级,其次是”*“ ”++“ ”--“ ”&“四个同样优先级的运算符。如:++P->a的表达式等价于++(p->a) 

 

(++p)->a先计算++p,p指向sun[1]; 

P++->a;则表达式等价于(p++)->a; 

p->a++的表达式等价于(p->a)++; 

 

3、结构体作为函数參数与结构体指针作为函数參数

 

 

举例1 

struct st 



int a;  

char b。 

}; 

 

fun(struct st bc) 



bc.a+=5; 

bc.b='A'; 

printf("%d,%c\n",bc.a,bc.b); 

}

  

main() 



struct st bl; 

bl.a=3; 

bl.b="c"; 

fun(bl); 

printf("%d,%c\n",bl.a,bl.b); 



 

执行结果为:8。A        3。c 

 

举例2: 

struct st 



int a; 

char b; 

}。 

 

fun(struct st *bp) 



bp->a+=5; 

bp->b='A'; 

printf("%d,%c\n",bc.a,bc.b); 

}

 

main() 



struct st bl; 

bl.a=3; 

bl.b="c"; 

fun(&bl); 

printf("%d,%c\n",bl.a,bl.b); 



 

执行结果为:8。A        8,A 

 

总结: 

将结构体变量作为函数參数,是将实參值传递给形參,属于值传递。

将结构体全部參数传递给形參使用,但本身的值不会改变。

将指向结构体变量的指针作为实參进行传递时,是将结构体变量的地址传递给形參。属于地址传递,会改变实际结构体变量的成员值的。

c语言中结构体指针的更多相关文章

  1. C语言中结构体赋值问题的讨论

    今天帮师姐调一个程序的BUG,师姐的程序中有个结构体直接赋值的语句,在我印象中结构体好像是不能直接赋值的,正如数组不能直接赋值那样,我怀疑这个地方有问题,但最后证明并不是这个问题.那么就总结一下C语言 ...

  2. C语言中结构体对齐问题

    C语言中结构体对齐问题 收藏 关于C语言中的结构体对齐问题 1,比如: struct{short a1;short a2;short a3;}A;struct{long a1;short a2;}B; ...

  3. C语言中结构体赋值问题的讨论(转载)

    今天帮师姐调一个程序的BUG,师姐的程序中有个结构体直接赋值的语句,在我印象中结构体好像是不能直接赋值的,正如数组不能直接赋值那样,我怀疑这个地方有问题,但最后证明并不是这个问题.那么就总结一下C语言 ...

  4. Go语言中结构体的使用-第2部分OOP

    1 概述 结构体的基本语法请参见:Go语言中结构体的使用-第1部分结构体.结构体除了是一个复合数据之外,还用来做面向对象编程.Go 语言使用结构体和结构体成员来描述真实世界的实体和实体对应的各种属性. ...

  5. 6. Go 语言中结构体的使用

    1. 结构体的定义格式 在go语言中结果的定义格式如下: 123 type structName struct { filedList} 列子如下: 1234 type Person struct { ...

  6. go语言初始化结构体指针

    go语言初始化结构体指针 head:=&ListNode{} 或者 head:=new(ListNode)

  7. go语言的结构体指针

    Go 语言结构体 Go 语言中数组可以存储同一类型的数据,但在结构体中我们可以为不同项定义不同的数据类型.   结构体是由一系列具有相同类型或不同类型的数据构成的数据集合.   结构体表示一项记录,比 ...

  8. Go语言中结构体的使用-第1部分结构体

    1 概述 结构体是由成员构成的复合类型.Go 语言使用结构体和结构体成员来描述真实世界的实体和实体对应的各种属性.结构体成员,也可称之为成员变量,字段,属性.属性要满足唯一性.结构体的概念在软件工程上 ...

  9. C语言定义结构体指针数组并初始化;里面全是结构体的地址

    #include <stdio.h> #include <string.h> struct tells;//声明结构体 struct info { char *infos; } ...

随机推荐

  1. Prime Gift(prime)

    Prime Gift(prime) 题目描述 Jyt有nn个质数,分别为p1,p2,p3-,pnp1,p2,p3-,pn. 她认为一个数xx是优秀的,当且仅当xx的所有质因子都在这nn个质数中. 她想 ...

  2. 亚瑟王(arthur)

    亚瑟王(arthur) 题目描述 小K不慎被LL邪教洗脑了,洗脑程度深到他甚至想要从亚瑟王邪教中脱坑.他决定,在脱坑之前,最后再来打一盘亚瑟王.既然是最后一战,就一定要打得漂亮.众所周知,亚瑟王是一个 ...

  3. Surface机制(SurfaceFlinger服务)

    Android系统Surface机制的SurfaceFlinger服务的线程模型分析http://blog.csdn.net/luoshengyang/article/details/8062945

  4. div 的相对定位与绝对定位

    网 上也有不少使用div + css进行布局的教程,却存在很多缺陷,一是对css的布局模型讲解不清楚,让人很难理解相对定位.浮动等概念:二是虽然避免了“表格套表格”的缺点,却 带来了“div 套 di ...

  5. HDOJ 2222: Keywords Search

    Keywords Search Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others ...

  6. linux 通过MD5监控指定路径文件的变动

    脚本须知: 1. 运行此脚本的用户必须是root,因为在某些文件所在路径普通用户没有访问权限 2. 源文件和其md5码只要有一方内容有改动,都会导致校验失败,所以校验码的保存就至关重要防止其他人修改, ...

  7. AC日记——【模板】普通平衡树(Treap/SBT) 洛谷 P3369

    [模板]普通平衡树(Treap/SBT) 思路: 劳资敲了一个多星期: 劳资终于a了: 劳资一直不a是因为一个小错误: 劳资最后看的模板: 劳资现在很愤怒: 劳资不想谈思路!!! 来,上代码: #in ...

  8. Android判断是否为刘海屏

    主要总结主流品牌小米.华为.oppo.vivo的刘海屏判断.在某些特殊页面需要适配刘海屏时,可以用以下方法判断.或者判断屏幕比例是否大于2. /** * 小米刘海屏判断. */ public stat ...

  9. (7)JavaScript-BOM(浏览器对象模 型)

    window 对象 全局作用域 在浏览器中, window 对象有双重角色,它既是通过 JavaScript 访问浏览器窗口的一个接口,又是 ECMAScript 规定的 Global 对象. 所有在 ...

  10. Codeforces Round #454 C. Shockers【模拟/hash】

    C. Shockers time limit per test 2 seconds memory limit per test 256 megabytes input standard input o ...