C语言结构体与结构体指针的使用

tips:最近要好好学习一下数据结构,所以必不可少的就是c语言的结构体和结构体指针了,所以就整理一下这些基础知识

c语言结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合。说的通俗一点就是一个集合。c语言是一门面向过程的编程语言,而结构体的使用在某些层次上跟面向对象有点异曲同工之处了。下面回归正题,学习一下结构体以及结构体指针的知识。


一、结构体变量的定义和初始化

1、首先我们来看一下结构体的定义

   struct 结构体名{成员列表;};//不要漏掉这里的分号!
  • 1
  • 2
  • 3
  • 4
//结构体的定义
struct student
{int num;char name[20];char sex;
};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

在这里我们要区别一下结构体名和变量名,结构体名是一种类型,不能被当成变量名来使用

变量名声明方法:
1)struct 结构体名 结构体变量名;
2)直接在定义结构体的时候添加变量名的声明

//在main()中定义及初始化
struct student st1 = {1001,"wr",'m'};
  • 1
  • 2
//结构体的定义以及初始化
struct student
{int num;char name[20];char sex;
}st2 = { 1002,"wr",'m' };
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
//用scanf()方法对结构体变量初始化
struct student st3;
scanf("%d %s %c",&st3.num,st3.name,&st3.sex);//对于数组,scanf输入的时候不用"&"
  • 1
  • 2
  • 3

结构的变量的访问(输出)

printf("%d,%s,%c\n", st1.num, st1.name, st1.sex);
  • 1

2.结构体数组的定义及初始化

   struct student sarr[3];//定义结构体数组//循环初始化for (int i = 0; i < 3; i++){scanf("%d %s %c",&sarr[i].num,sarr[i].name,&sarr[i].sex);}//测试输出for (int i = 0; i < 3; i++){printf("%d,%s,%c\n", sarr[i].num,sarr[i].name,sarr[i].sex);}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

二、结构体指针的使用

1.结构体指针的定义方法
1)struct 结构体名 *指针;
2)直接在定义结构体的时候添加结构体指针的声明

//在main()方法中定义
struct student *p1;//定义结构体指针
  • 1
  • 2
struct student
{int num;char name[20];char sex;
}*p2;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

2.利用结构体指针的访问结构体变量(输出)

结构体指针的访问变量方法
1)p->结构体成员;
2)(*p).结构体成员;

//指针访问
struct student *p;//定义结构体指针
p=&st1;
printf("%d %s %c\n",p->num,p->name,p->sex);
  • 1
  • 2
  • 3
  • 4
//指针访问
struct student *p;//定义结构体指针
p=&st1;
printf("%d %s %c\n", (*p).num, (*p).name, (*p).sex);
  • 1
  • 2
  • 3
  • 4

看了上面的基础知识是不是觉得比较简单:),下面让我们来分析一下两个特殊的结构体指针访问方法:)
1)p->num++
2)p++ ->num
来看下面的例子
大家可以先不看注释,猜一下输出的结果:)

#include <stdio.h>
#include <stdlib.h>
//定义结构体
struct student
{int num;char name[20];char sex;
};

int main()
{
//定义结构体数组
struct student sarr[3] = { 1001,“wr1”,‘m’,1003,“wr2”,‘m’,1005,“wr3”,‘m’ };
struct student *p;//定义结构体指针

p <span class="token operator">=</span> sarr<span class="token punctuation">;</span><span class="token comment">//数组本身就是地址,不用取地址</span>
<span class="token keyword">int</span> num<span class="token punctuation">;</span>
num <span class="token operator">=</span> p<span class="token operator">-&gt;</span>num<span class="token operator">++</span><span class="token punctuation">;</span><span class="token comment">//num=p-&gt;num;p-&gt;num=p-&gt;num+1,优先级-&gt;的优先级高于++</span>
<span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"num=%d,p-&gt;num=%d\n"</span><span class="token punctuation">,</span>num<span class="token punctuation">,</span>p<span class="token operator">-&gt;</span>num<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token comment">//p-&gt;num上一步已经加一</span>
num <span class="token operator">=</span> p<span class="token operator">++</span><span class="token operator">-&gt;</span>num<span class="token punctuation">;</span><span class="token comment">//num=p-&gt;num,p=p+1</span>
<span class="token function">printf</span><span class="token punctuation">(</span><span class="token string">"num=%d,p-&gt;num=%d\n"</span><span class="token punctuation">,</span> num<span class="token punctuation">,</span> p<span class="token operator">-&gt;</span>num<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span>

}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

下面来看看输出的结果
看看你猜对了嘛。。。


附:c语言常见运算符优先级

优先级 运算符 含义 结合方向
1 [] 数组下标 从左向右
() 圆括号
. 成员选择(对象)
-> 成员选择(指针)
2 - 负号 从右向左
~ 按位取反
++ 自增
-- 自减
* 取值
& 取地址
! 逻辑非
sizeof 数据类型长度
(类型)强制类型转换 强制类型转换
3 / 从左向右
*
% 取模
4 + 从左向右
-
5 << 左移 从左向右
>> 右移
6 > 大于 从左向右
>= 大于等于
< 小于
<= 小于等于
7 == 等于 从左向右
!= 不等于

希望大家看了能够有所收获,加油!


tips:每一日你所付出的代价都比前一日高,因为你的生命又消短了一天,所以每一日你都要更积极。今天太宝贵,不应该为酸苦的忧虑和辛涩的悔恨所销蚀,抬起下巴,抓住今天,它不再回来。

C语言结构体与结构体指针的使用相关推荐

  1. Android JNI编程(六)——C语言函数指针、Unition联合体、枚举、Typedef别名、结构体、结构体指针...

    版权声明:本文出自阿钟的博客,转载请注明出处:http://blog.csdn.net/a_zhon/. 目录(?)[+] 一:函数指针 1.函数指针顾名思义就是定义一个指针变量指向一个函数,和一级指 ...

  2. C语言定义了一个结构体怎么分配内存?C\C++中结构体变量与结构体指针内存分配问题?

    C语言定义了一个结构体怎么分配内存?C\C++中结构体变量与结构体指针内存分配问题? 问题1:结构体指针最开始怎么分配内存?用sizeof()是不能确定大小的. 问题2:给结构体变量分配之后,是否还要 ...

  3. 结构体前面加星号_C语言中带星号的类型指针有哪些特性

    C语言中带星号的类型指针有哪些特性 指针是什么?很多人说,指针就是地址,那这么说的人肯定是对指针有所了解,他们这么说也不能说全错,我只能在这里说:"他们并没有真正学会指针,如果想学好指针,请 ...

  4. c语言学习笔记【结构体02】结构体指针变量与结构体变量的函数参数,C语言学习笔记结构体02结构体指针变量与结构体变量的函数参数.docx...

    C 语言学习笔记[结构体02]结构体指针变量与结构体变量 的函数参数 C 语言学习笔记之结构体指针变量一提指针,那可 是 C 语言的核心了,有多少学子曾拜倒在指针的脚下.单纯的说指针,其实并不难,但是 ...

  5. C语言中结构化数据(变量,指针,数组,字符串,结构体和联合)的内存表示

    目录 结构化数据表示 一.内存地址: 二.全局变量和局部变量的内存布局 三.数据在内存中的表示 四.数组在内存中的表示 五.字符串在内存中的表示 六.结构和联合在内存中的表示 结构化数据表示 一.内存 ...

  6. 结构体中的函数指针(c语言里一种思想)

    阅读raft源码的时候看到结构体里面的void(*xx) 看不懂这个地方,看上去又像面向对象的类方法,但是这是c语言的结构体啊,了解了这是函数指针.小趴菜~ 一.函数指针 函数指针是指向函数的指针变量 ...

  7. C语言中的指针应用,函数指针,指针函数,结构体中定义函数指针。

    指针函数 指针函数就是一个返回指针的函数,其本质是一个函数,该函数的返回值是一个指针. 声明一个指针函数 int* fun(int x,int y); 例子 typedef struct _Data{ ...

  8. 结构体自定义指针函数c语言,C语言结构体中的函数指针

    C语言结构体中的函数指针 C语言结构体中的函数指针内容由小编收集整理,希望对您的 学习有所帮助!更多内容请关注应届毕业生考试网! 结构体是由一系列具有相同类型或不同类型的数据构成的数据集合.所以,标准 ...

  9. C语言结构体和结构体指针的简单用法

    C语言结构体和结构体指针的简单用法 这里总结一下自己的学习笔记,关于C语言当中的结构体指针的用法,以及结构体简单使用. 简单介绍一下今天出场的嘉宾–>结构体和结构体指针 什么是结构体: 1,定义 ...

  10. c语言的结构体与指针的区别,C语言 结构体与结构体指针用法总结

    在C语言开发中,结构体用到的机会很多.所谓结构体,就是定义一种里面包含多种元素的变量. 我们来看一个简单的例子.比如你想定义一个书名列表然后为每本书创建书名和作者作为书的信息.结构体变量定义如下: s ...

最新文章

  1. elasticsearch 后置过滤器(Post Filter)
  2. Activiti - 新一代的开源BPM引擎
  3. session对象的使用
  4. postgresql事务
  5. fzu2202 犯罪嫌疑人
  6. matlab中lambertw,MATLAB解常微分方程
  7. python数据库操作——NoSQL数据库之连接MongoDB、Redis数据库
  8. __FILE__ 与 $_SERVER['SCRIPT_FILENAME']的区别
  9. 细胞生物学-7-叶绿体和线粒体
  10. GNS3路由器设备间ping不通的排查方法
  11. tf.nn.dropout() 警报信息处理
  12. 如何使用MySQL存储Emoji表情,UTF-8和UTF-8MB4字符编码有何区别?
  13. 思维导图训练孩子逻辑思维能力的方法
  14. Android账号管理机制
  15. MySQL中:一条update语句是怎样执行的
  16. idea generated-requests.http 表单请求示例
  17. 记录一次H3C交换机的配置
  18. 【笔试or面试】3G门户校园招聘
  19. Sql 查询学生成绩表中每个科目的最高分及对应科目和学生
  20. 创业公司遇到招募技术人才难的问题,怎么办?

热门文章

  1. SHA256加密-loadrunner登录加密
  2. 制药业CRM如何“对症下药”?
  3. Garden Planner for Mac(景观设计软件)
  4. VS2019 + OpenVINO 初体验
  5. MacOS专用防火墙Paragon Firewall可有效监视控制网络接入
  6. xshell服务器命令
  7. OneClock for mac(简约时钟工具)
  8. 【C语言数组题】字符串去重
  9. CSDN日报191105:2019年11月全国程序员工资统计,区块链工程师比算法工资高
  10. 一个域名可以同时在多家服务器商备案吗?