c语言中结构体指针
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语言中结构体指针的更多相关文章
- C语言中结构体赋值问题的讨论
今天帮师姐调一个程序的BUG,师姐的程序中有个结构体直接赋值的语句,在我印象中结构体好像是不能直接赋值的,正如数组不能直接赋值那样,我怀疑这个地方有问题,但最后证明并不是这个问题.那么就总结一下C语言 ...
- C语言中结构体对齐问题
C语言中结构体对齐问题 收藏 关于C语言中的结构体对齐问题 1,比如: struct{short a1;short a2;short a3;}A;struct{long a1;short a2;}B; ...
- C语言中结构体赋值问题的讨论(转载)
今天帮师姐调一个程序的BUG,师姐的程序中有个结构体直接赋值的语句,在我印象中结构体好像是不能直接赋值的,正如数组不能直接赋值那样,我怀疑这个地方有问题,但最后证明并不是这个问题.那么就总结一下C语言 ...
- Go语言中结构体的使用-第2部分OOP
1 概述 结构体的基本语法请参见:Go语言中结构体的使用-第1部分结构体.结构体除了是一个复合数据之外,还用来做面向对象编程.Go 语言使用结构体和结构体成员来描述真实世界的实体和实体对应的各种属性. ...
- 6. Go 语言中结构体的使用
1. 结构体的定义格式 在go语言中结果的定义格式如下: 123 type structName struct { filedList} 列子如下: 1234 type Person struct { ...
- go语言初始化结构体指针
go语言初始化结构体指针 head:=&ListNode{} 或者 head:=new(ListNode)
- go语言的结构体指针
Go 语言结构体 Go 语言中数组可以存储同一类型的数据,但在结构体中我们可以为不同项定义不同的数据类型. 结构体是由一系列具有相同类型或不同类型的数据构成的数据集合. 结构体表示一项记录,比 ...
- Go语言中结构体的使用-第1部分结构体
1 概述 结构体是由成员构成的复合类型.Go 语言使用结构体和结构体成员来描述真实世界的实体和实体对应的各种属性.结构体成员,也可称之为成员变量,字段,属性.属性要满足唯一性.结构体的概念在软件工程上 ...
- C语言定义结构体指针数组并初始化;里面全是结构体的地址
#include <stdio.h> #include <string.h> struct tells;//声明结构体 struct info { char *infos; } ...
随机推荐
- webpack命令
webpack // 执行一次开发的编译 webpack -p // 针对发布环境编译(压缩代码) webpack -w(或--watch) // 进行开发过程持续的增量编译(飞快地!) webpac ...
- 【HDOJ5976】Detachment(贪心)
题意:给定n,要求构造若干个各不相同且和为n的正整数使得它们的乘积最大 T<=1e6,1<=n<=1e9 思路:From https://blog.csdn.net/qq_34374 ...
- linux多线程学习笔记六--一次性初始化和线程私有数据【转】
转自:http://blog.csdn.net/kkxgx/article/details/7513278 版权声明:本文为博主原创文章,未经博主允许不得转载. 一,一次性初始化 以保证线程在调用资源 ...
- DBus介绍
1. 介绍 DBus是一种桌面环境的进程间通讯(IPC)机制,有低时延.低消耗等优点 基于socket,提供了一对一的对等通讯:使用dbus-daemon作为后台进程时,可实现多对多通讯 由如下三个层 ...
- Push pull, open drain circuit, pull up, pull down resistor
Push pull 就以下面這個 電路來說, 因為沒有 pull up resistor, 所以 output voltage 由 low 往 high 的速度會較快. 有兩個電晶體,一個on,一個 ...
- Python学习杂记_11_函数(一)
函数也叫方法,就是把实现某种功能的一组代码封装起来,当你需要这个功能时直接调用函数即可. 定义函数:定义函数时要注意 “def”关键字,“:”,“函数体缩进”:用“return”使函数有具体返回值,没 ...
- HDU 1999 不可摸数【类似筛法求真因子和】
不可摸数 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- ELK之logstash收集日志写入redis及读取redis
logstash->redis->logstash->elasticsearch 1.安装部署redis cd /usr/local/src wget http://download ...
- Java NIO中的Channel接口
1. Channel 通道,可以将指定文件的部分或全部直接映射成Buffer. 不能直接读写Channel中的数据,Channel只能与ByteBuffer交互. 读数据时,把Channel中的数据 ...
- 【ActiveMQ】1.下载安装启动使用
官网下载:http://activemq.apache.org/activemq-5121-release.html 官网指导文档:http://activemq.apache.org/version ...