C语言结构体指针

【C语言】结构体指针 C语言之结构体指针 结构体指针,即为指向一种结构体类型的指针。 1.一般定义法 struct student { int num; int grade; } ; struct student *p_student; //定义了一个指向struct student类型结构的指针。 结构体指针p_student可以指向任一属于struct student类型结构的的结构体变量。 2.加上typ... 阅读详情
1.指针初始化(迫切

错误代码:

int * point;    //  定义一个指针变量
*point = 1;  // 将 1 赋给指针指向的内存

问题:由于 point 指针未初始化, point 的值为任意值,它可能指向一段重要的程序代码,接着对 point 指针的赋值语句则改写了 point 指向内存中的内容,这是极其危险的。


当定义了一个int型的指针变量p时,系统会在栈里面自动为p分配内存空间,注意是为p分配内存空间!!!而此时p指向的内存地址是0(或者是一个其他的地址值,根据不同的编译器而定).此时若对p进行解引用操作,能通过编译,因为p确实有一个指向的地址,但是这个地址是错误的,或者说是无意义的,所以再运行的时候会出错.
举一个例子,int *a;
中间若干语句之后执行
*a =1;
请问这样运行之后程序会出现什么结果,很多人都认为a这个指针最后指向了1,但实际上并不是,如果你运气好,给你分配一个空地址,运气不好,程序直接崩溃,会提示你内存错误。也就是,你这些程序根本就没有指向内存。为什么呢,因为你首先声明了一个指针,但是没有初始化就赋值了,这是不合法的,没有初始化的情况下,a指向哪里完全由操作系统决定,如果操作系统的机制不够成熟,那么这就是一个野指针,指向了一块非法内存地址。所以,一定要初始化,否则后患无穷.

2.结构体指针
typedef struct BiTNode{
    int data;
} BiTNode, *BiTree;

(1)首先,我们先实验BiTNode
         1.在主程序中输入以下代码

int main(){
	   BiTNode a;
	   a.data=1;
	   printf("a的值为%d\n",a.data);
}

         这样使用结构体是可以的


         2.把.换成->,在主程序中输入以下的代码:

int main(){
	  BiTNode a;
	  a->data=1;
}

         这样不行,编译器会报错。


总结一下,BiTNode所创建的结构体,只能用” . ”来访问结构体中的元素。
(2)然后,我们实验BiTree
         1.在主程序中输入以下代码

int main(){
	   BiTNode a; 
	   BiTree b;
	   b=&a;//指针必须初始化
	   b->data=123;
	   printf("b的值为%d",b->data);
}

         我们创建了一个结构体指针,结构体指针可以用->来访问结构体中的元素


         2.把->换成.,在主程序中输入以下的代码:

int main(){
	BiTNode a; 
	BiTree b;
	b=&a;
	(*b).data=234;
	printf("b的值为%d",(*b).data);
}

         这样使用结构体指针也可以


总结一下,BiTree所创建的结构体指针,既可以使用->访问结构体中的元素,也可以用(*p).来访问结构体中的元素
(3)使用BiTree *创建元素(二级指针)
         在主程序中输入以下代码

int main(){
	BiTNode a;
	BiTree b; 
	BiTree *c;
	b=&a;
	c=&b;
	printf("c所在内存地址是%#X\n",&c);
	printf("c中所存储的地址是%#X\n",c);
	printf("b所在内存地址是%#X\n",&b);
	printf("b中所存储的地址是%#X\n",b);
	printf("a所在内存地址是%#X\n",&a);
}

输出结果为:
c所在内存地址是0x22FE30
c中所存储的地址是0x22FE38
b所在内存地址是0x22FE38
b中所存储的地址是0x22FE40
a所在内存地址是0x22FE40
23333


c语言中结构体的指针初始化,c语言结构体指针初始化 今天终于看完了C语言深度剖析这本书,对C语言有了进一步的了解与感悟,突然发觉原来自己学C语言的时候学得是那样的迷糊,缺少深入的思考,在重新看书的时候发觉C语言基本教材虽然经典,但是缺乏独到性,老师在讲解的过程中也就照本宣科了,没有多大的启迪。看到C语言内存管理这块,发觉还是挺有用的,当然平时在编程时基本上就没有考虑过内存问题。定义了指针变量,没有为指针分配内存,即指针没有在内存中指向一块合法的内存... 阅读详情

相关推荐

C 语言通过结构体成员获得结构体指针

通过结构体成员拿到结构体的指针,是C语言实现继承多态的基础。面向对象C编程可以参看这里OOC 面向对象C语言编程实践。这里详细介绍这个核心的操作方法。 /** * Get struct pointer from member pointer */ #define StructFrom2(memberPtr, structType) \ ((structType*) ((char*) m

把理性与逻辑灌入电光石火奔腾流淌的指令集…… 5314

C语言:结构体指针

使用结构体指针注意点: 1.如果用结构体指针,就不能用(点运算符)访问结构体中的变量,要用-> 比如:stu.score = 50; 变成 stu->score = 50; 2.指针要注意是否是野指针或者NULL,非法内存,会段错误,使用前要malloc 比如:struct Student *p;(野指针) 或 struct Student *p = NULL; 3.如果结构体指针发生偏移。则是偏移整个结构体的大小。 struct Student...

枕上青灯竹书香的博客 1万+

【Python Turtle合集】有趣好玩的代码当然要分享给大家啦~(皮卡丘、玫瑰花、小黄人......)

前言 🚀 作者 :“程序员梨子” 🚀 **文章简介 **:本篇文章主要是写了利用Turtle库绘制四种不一样的图案的小程序! 🚀 **文章源码免费获取 : 为了感谢每一个关注我的小可爱💓每篇文章的项目源码都是无 偿分享滴💓👇👇👇👇 点这里蓝色这行字体自取,需要什么源码记得说标题名字哈!私信我也可! 🚀 欢迎小伙伴们 点赞👍、收藏⭐、留言💬 正文 今天给大家介绍一个好玩儿的库,嘻嘻! Turtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x、纵

TZ45678的博客 3万+

【C语言基础】指针、结构体

指针和结构体

m0_51490933的博客 5601

【无人机智能避障】基于深度强化学习的城市复杂环境路径规划实战

本文探讨了基于深度强化学习的无人机在城市复杂环境中的智能避障与路径规划。针对传统算法难以应对动态与非结构化障碍的痛点,文章详细介绍了如何利用DQN算法,通过设计合理的状态空间、奖励函数,并结合经验回放、目标网络等技巧,训练无人机自主学会在楼宇间安全、高效飞行的策略。

weixin_28224217的博客 733

Python Opencv cv2提取图像中某种特定颜色区域(例如黑字白纸背景下的红色公章提取),并将纯色背景透明化

拜拜PHOTOSHOP- 领导突然让我帮他把公章从图片中抠出来,在确保了不是要做坏事的情况下,我打开了PHOTOSHOP,用魔棒工具一点一点抠,但由于魔棒工具的原理是对比临近区域像素差值,导致封闭字体中的区域无法剔除,而且一点一点抠非常麻烦,愤而PYTHON,使用CV2完美解决。 效果如下(马赛克是我添加的): 任务就是把蓝色的公章抠出来。 效果如上。 代码如下: import cv2 import numpy as np src = cv2.imread(r"imagepath")#这里填你的原图像路

qq_43670549的博客 1万+

C语言自定义数据类型(三)结构体指针

所谓结构体指针就是指向结构体变量的指针,一个结构体变量的起始地址就是这个结构体变量的指针。如果把一个结构体变量的起始地址存放在一个指针变量中,那么,这个指针变量就指向该结构体变量。

伯努利 3万+

神领物流-day01-项目概述

公司从2019年开始业务快速扩张,网点数量从138家扩展至540家,车辆从170台增长到800台。同时,原有的系统非常简单,比如车辆的调度靠人工操作、所有的货物分拣依靠人员,核心订单数据手动录入,人效非常低。随着业务不断演进,技术的不断提升,原有运输管理系统已无法满足现有快速扩展下的业务需求,但针对现有系统评估后发现,系统升级成本远高于重新研发。因此,公司决定基于现有业务体系进行重新构建,打造一套新的TMS运输系统,直接更替原有系统。

心飞为你飞 2255

Day19

结构体类型结构体类型。

m0_71729312的博客 1133

别再为EPI形变头疼了!FSL的topup+eddy实战保姆级教程(含AP/PA数据采集要点)

本文详细介绍了如何使用FSL的topup和eddy工具解决EPI形变问题,包括数据采集要点、参数设置和实战操作步骤。通过AP/PA双编码数据和精确的形变场估计,有效矫正MRI图像中的几何畸变,提升弥散数据质量。特别适合需要处理高场强MRI数据的研究人员和技术人员。

weixin_28725949的博客 399

高德地图JSAPI中旋转Marker点标签图片时候,且不旋转lable内容方法。

高德地图JSAPI中旋转Marker点标签图片时候,且不旋转lable内容方法

weixin_42960380的博客 2500

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

C语言结构体与结构体指针的使用 tips:最近要好好学习一下数据结构,所以必不可少的就是c语言的结构体和结构体指针了,所以就整理一下这些基础知识 c语言结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合。说的通俗一点就是一个集合。c语言是一门面向过程的编程语言,而结构体的使用在某些层次上跟面向对象有点异曲同工之处了。下面回归正题,学习一下结构体以及结构体指针的知识。 一、结构体变量的定义和初始化 1、首先我们来看一下结构体的定义 struct 结构体名 { 成员列表; }

wrlovesmile的博客 8万+

系统安装(kuntaiR522 kvm安装)

鲲泰R522服务器kvm安装rocky

weixin_46396917的博客 1820

C语言指针与结构体详述

本文从基础出发,以数组引入指针,逐步讲解指针以及结构体的概念与使用。如果读者能够认真地读完本文,再去阅读一些较为复杂的C语言代码会很容易。

weixin_44969353的博客 9142

mapbox进阶,百度地图、高德地图纠偏,使用在线网络地图加载插件

本文详细介绍如何基于mapbox-gl v3.8.0版本百度地图、高德地图纠偏,使用在线网络地图加载插件,亲测可用。希望能帮助到您。一起学习,加油!加油!

我哎GIS博客 748

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

c语言中结构体指针

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

团长的专栏 2万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

C语言指向结构体的指针,如何通过指针获取结构体当中的值

C语言指向结构体的指针,如何通过指针获取结构体当中的值 格式: 结构体类型 变量名称 ,* 指针名称 = &变量名称; 案例如下 定义结构体并定义结构体指针让其指向结构体 #include<stdio.h> #include<string.h> typedef struct stud{//定义了一个结构体 char Id[10];//学号 char Name[10];...

程序员猫爪 1万+

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

C语言 结构体指针

当一个指针变量指向结构体时,我们就称它为结构体指针 struct 结构体名 *变量名; //结构体 struct stu{ char *name; //姓名 int num; //学号 int age; //年龄 char group; //所在小组 float score; //成绩 } stu1 = { "Tom", 12, 18, 'A'...

imxlw00的专栏 3984

【c 语言】结构体指针

首先,你需要定义一个结构体。int age;这里定义了一个名为Studentname(一个字符数组用于存储学生姓名)、age(一个整数用于存储学生年龄)和score(一个浮点数用于存储学生成绩)。这篇文章到这里就结束了如果觉得这篇博客对你有用的话,别忘记三连哦。我是豌豆射手^,让我们我们下次再见。

m0_74195174的博客 1367

结构体指针,C语言结构体指针详解

指向结构体变量的指针 #include <stdio.h> # include <string.h> struct AGE { int year; int month; int day; }; struct STUDENT { char name[20]; //姓名 int num; //学号 struct AGE birthday; //生日 float score...

zhe_csdn的博客 4188

C语言结构体、指针和结构体指针的基本操作

与函数声明相同,在结构体声明后的位置,都可以直接使用。一般都是在所有函数前面声明结构体类型,方便调用。结构体定义的方式通常有两种。(1).方法一:先声明,再定义此方法定义的结构体变量通常为局部变量。(2).方法二:声明的同时进行定义此方法定义的变量通常为全局变量。struct STUDENT//此处的结构体类型STUDENT可省略,成为直接定义结构体变量的方式int num;char sex;int age;注意:-只有结构体变量才分配地址,结构体类型的声明不分配空间。

qq_42334826的博客 5638

C语言-结构体指针及结构体嵌套

C语言中结构体是一种构造类型,和数组、基本数据类型一样,可以定义指向该种类型的指针。结构体指针的定义类似其他基本数据类型的定义,格式如下 struct 结构体名 * 指针名; 比如: struct person{char[20] name; int age;};//先定义一个人的结构体 struct person *p;//然后可以定义一个人的结构体指针 struct person p1

zhudong10的博客 2万+

【C语言】结构体、结构体指针

上述描述学生的举例即如此,接着用它举例结构体也是一种数据类型,Stu为。

2301_76153977的博客 1072
下一篇: 链表遍历算法探究
cookie_plus
博客等级 码龄7年 52粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值