一、“.”和“->”区别:

当声明一个结构体时,因为自动分配了结构体的内存空间,所以可以直接用“.”访问相应结构体内的存储单元,比如:

typedef struct Node{

int value;

}node;

node o;

o.value=2;

但如果声明的是一个结构体指针,则需要手动开辟一个结构体内存后,将这个指针指向该内存块后,再使用“->”进行内部变量访问,同时 (*o).value 等价于 o->value。

node *o;

o->value=2;

二、指向结构体的指针必须初始化:

#include

typedef struct Node{

int value;

}node;

int main(){

node *o;

o->value=2;

printf("%d",o->value);

return0;

}

这段代码编译没问题,运行却出错,为什么呢?

定义了一个结构体指针o用来指向一个node结构体,但是你却没有给他赋值,系统只知道“o应该是一个node结构体内存单元的首地址”,但是地址是多少呢,还没有分配,所以此时o的值为NULL,*o指向的是一个空或者随机的内存空间,常说的“野指针”。所以p->a=1这句就会出错。 所以我们应该给o进行初始化,初始化有两种方式。

一种是malloc动态分配内存:

o=(node *)malloc(sizeof(node));

o->value=2;

另一种是将o指向一个已经存在的node结构体:

node r;

o = &r;

o->value=2;//因为o为指针,所以此时其实为r的value被赋值为2

Monkey&Penguin

发布了4 篇原创文章 · 获赞 0 · 访问量 63

私信

关注

标签:node,指向,int,value,C语言,陷阱,指针,结构

来源: https://blog.csdn.net/qq_40285768/article/details/104607834

c语言指针结构体心得,C语言结构体指针陷阱相关推荐

  1. c语言程序实践感受心得,C语言实践心得体会

    C语言实践心得体会 在科技高度发展的今天,计算机在人们之中的作用越来越突出.而c语言作为一种计算机的语言,我们学习它,有助于我们更好的了解计算机,与计算机进行交流,因此,c语言的学习对我们尤其重要. ...

  2. c语言编程课程心得,c语言编程课程设计心得.docx

    C语言编程课程设计心得 C语言编程课程设计心得 河南城建学院 <C语言程序设计>课程设计报告 适用专业工程管理专业课程名称C语言程序设计指导教师赵军民.魏新红.张芳芳 设计人:051409 ...

  3. C语言结构体里的成员数组和指针

    单看这文章的标题,你可能会觉得好像没什么意思.你先别下这个结论,相信这篇文章会对你理解C语言有帮助.这篇文章产生的背景是在微博上,看到@Laruence同学出了一个关于C语言的题,微博链接.微博截图如 ...

  4. python中的记录指针_使用Python向C语言的链接库传递数组、结构体、指针类型的数据...

    使用python向C语言的链接库传递数组.结构体.指针类型的数据 由于最近的项目频繁使用python调用同事的C语言代码,在调用过程中踩了很多坑,一点一点写出来供大家参考,我们仍然是使用ctypes来 ...

  5. python结构体数组传出接收c动态库_使用Python向C语言的链接库传递数组、结构体、指针类型的数据...

    使用python向C语言的链接库传递数组.结构体.指针类型的数据 由于最近的项目频繁使用python调用同事的C语言代码,在调用过程中踩了很多坑,一点一点写出来供大家参考,我们仍然是使用ctypes来 ...

  6. C语言基础1:初识C语言(转义、注释;数组、操作符、反码、补码、static、define、指针、结构体常变量;局部变量;作用域、生命周期)

    文章目录 C语言基础1:初识C语言 1.C语言简介 1.1什么是C语言 1.2C语言的发展 2.第一个C语言程序 2.1创建项目 2.2添加源文件 2.3写代码 3.数据类型 4.变量.常量 4.1定 ...

  7. go语言基础(二)函数,数组,指针,结构体

    目录 函数 匿名函数 函数闭包的简单使用以及获取键盘输入 闭包加上函数多返回值 为什么闭包不会被垃圾回收 defer 内置函数panic.recover 语言变量作用域 数组 数组定义 数组+函数+宏 ...

  8. 初识C语言(1)(2)(3)(4) C语言入门 保姆级教程 变量 常量 字符串 转义字符 操作符 关键字 字符串 指针 函数 结构体 数组 选择语句 循环语句

    一.如何写C语言代码 1.编译器 2.创建项目 3.创建源文件 4.写代码 5.编译+链接+运行 项目名字不要汉语,不要特殊字符,不要加空格,项目路径一般为你想要的路径 C语言中,一般创建.c源文件, ...

  9. C语言结构体的定义与使用、结构体数组、指向结构体的指针(有代码详解)

    1.结构体的定义与使用 结构体是一种构造数据类型 把不同类型的数据组合成一个整体 结构体的定义形式: struct 结构体名{结构体所包含的变量或数组 }; 结构体是一种集合,它里面包含了多个变量或数 ...

最新文章

  1. 什么是UUID及其实现代码
  2. 新浪php面试题目,新浪php的面试题 收集
  3. 皮一皮:谁来解释下一无所有的字典含义?
  4. Linux脚本实战之猜数字
  5. 逻辑建模与物理建模_架构层和建模域逻辑
  6. 前端学习(1401):多人管理21新增用户
  7. python逻辑型数据也叫什么_Python入门 | 运算符和数据类型
  8. 计算与推断思维 十四、回归的推断
  9. Xcode新建View Controller Scene并实现界面间跳转的方法
  10. python爬取千图网高清图
  11. 前端开发需要学习的技术:
  12. 2017年数模国赛B题第一小题的思路过程(个人思路)
  13. CF1528B Kavi on Pairing Duty(dp)
  14. 基于java的高校运动会管理系统的设计与实现--毕业论文(可仅作参考)
  15. 我帮粉丝赚了10w+
  16. 小程序导航图标_商场寻店不迷路 业内首个小程序AR导航上线
  17. matplotlib中箱线图、极线图、阶梯图的绘制
  18. 打开了ros中的rviz,显示不了机器人模型
  19. 手机换android版本,安卓手机怎么换系统(最好能自己换)
  20. Realme GT ROOT 解锁BL教程

热门文章

  1. IAR7.8 IAR8.5 IAR9.10.1 IAR9.10.2 KEIL 安装包
  2. 电脑算力测试软件,【分享】linpack ——intel的pc算力测试软件
  3. ArcGIS 提取高程变异系数
  4. 常见java本地缓存
  5. 全球与中国漏磁清管器市场深度研究分析报告
  6. Java:图形界面实现桌面数字时钟
  7. linux 查看网页命令行,命令行浏览网页命令
  8. C语言课设:影院售票管理系统
  9. VB.NET 计时器 时分秒
  10. 每日一C | 三只小猪称体重