含有指针成员的结构体使用总结
来源:互联网 发布:二十四节气小雪知乎 编辑:程序博客网 时间:2024/05/16 12:00
在C++中经常用到结构体和指针,当定义一个结构体,结构体成员中有指针的时候,需要注意很多。一下分为:结构体初始化、结构体作为函数参数、函数返回值、以及结构体指针的情况进行总结。
一、含有指针成员的结构体初始化
含有指针成员的结构体初始化的时候,必须给指针成员给一个明确的地址。注意:给指针成员初始化的时候,要么给其一个地址,比如是数组数组地址的时候,就可以通过指针来操作数组,也可以一个变量的地址;还可以给其新建一段内存,就是new一段内存,内存的地址由系统决定。如果含有指针的结构体在初始化之前直接对指针进行操作,会出现错误,因为指针必须先初始化再操作。
以下是示例:
struct keypoint{int x;int y;int* data;int number;};keypoint point;point.x = 1;point.y = 0;point.number = NUMBER;for (int i = 0; i < NUMBER; i++){point.data[i] = i; //会出错,因为为初始化指针,就直接使用}必须为其指针初始化赋值:
point.data = new int [NUMBER];这样就可以。
二、含有指针成员的结构体作为函数参数
当含有指针成员的结构体作为函数参数的时候,通过形参将结构体传入函数,结构体变量中的指针指向的变量变化可以保存,但是一般变量的变化不能保存。如果要保存一般变量的变化,需将函数参数写成引用的类型&。
在上述的代码基础上:
keypoint point0;point0.x = 10;point0.y = 10;point0.number = 100;point0.data = new int[point0.number];for (int j = 0; j < 100; j++)point0.data[j] = j;changeKeypoint(point0);<span style="white-space:pre"></span>//运行结果data指向的数据每个数据都改变了,但是x和y的值没有变化。<pre name="code" class="cpp">//函数定义void changeKeypoint(keypoint keypoints){keypoints.x += 1000;keypoints.y += 1000;for (int i = 0; i < keypoints.number; i++){keypoints.data[i] += 1000;}}但是如果将函数改为:
void changeKeypoint(keypoint &keypoints)<span style="white-space:pre"></span>//函数参数为引用类型{keypoints.x += 1000;keypoints.y += 1000;for (int i = 0; i < keypoints.number; i++){keypoints.data[i] += 1000;}}这样就可以实现对结构体变量的x和y值的改变。
三、含有指针成员的结构体作为函数返回值
可以直接将结构体和一般类型的变量(比如int、double等)返回。
keypoint point0 = SetPoint();<span style="white-space:pre"></span>//points结构体的x、y和指针的数据值都能返回//函数定义keypoint SetPoint(){keypoint point0;point0.x = 10;point0.y = 10;point0.number = 100;point0.data = new int[point0.number];for (int j = 0; j < 100; j++)point0.data[j] = j;return point0;}运行结果:
point0.x = 10, <pre name="code" class="cpp">point0.y = 10,
<pre name="code" class="cpp">point0.data[j] = j; //j从0到100
四、含有指针成员的结构体的指针
可以定义指向结构体的指针,即指针指向的是一个结构体,指针存放的是一结构体的指针。
keypoint* points;points->x = 0;points->y = 10;points->data = new int [100];这个时候需要注意的是,对结构体成员的操作,必须用“->”运算符,不能用"."号。
0 2
- 含有指针成员的结构体使用总结
- 结构体成员内部含有一级指针和二级指针的情况
- 结构体中指针成员使用时的注意事项
- 含有string成员的结构体变量,为什么不能初始化?
- 结构体成员指针使用要点
- 含有指针成员的类的拷贝
- 含有指针成员的类的拷贝
- 含有指针成员的类的拷贝
- 含有指针成员的类的拷贝
- 关于结构体中含有指针时候的内存分配
- 函数指针作为结构体的成员
- 结构体中指针成员的动态分配
- 读陈浩的《C语言结构体里的成员数组和指针》总结,零长度数组
- 读陈浩的《C语言结构体里的成员数组和指针》总结,零长度数组
- 结构体中含有指针如何初始化
- 【100题】含有指针成员的类的拷贝问题~~
- 含有指针成员的类的拷贝[C/C++/C#]
- 含有指针成员的类封装的第三种方式
- RMQ ST 算法模板
- NYOJ一笔画
- 音乐播放器app(二)—主页面的分析与制作
- Arduino 002 --- 在Ubuntu(Linux) 中搭建Arduino开发环境
- 年终总结
- 含有指针成员的结构体使用总结
- 每天一个Linux命令
- Leetcode no. 105
- DPL,RPL,CPL 之间的联系和区别
- dom4j的使用
- java.lang.Class类
- Hive 基础之:分区、桶、Sort Merge Bucket Join
- RGB详解系列
- 原子上下文,进程上下文,中断上下文的详细解析