郑州网站提升排名,网站建设推广合同,企业网站设计wordpress,站酷做网站前言
本博客旨在记录C学习过程中的一些细节知识理解#xff0c;由于问题的产生并非成体系#xff0c;所以前期的记录可能会无序一些。烦请读者参阅目录进行快速的问题定位与跳转 C基础与细节理解 前言正文部分C基础#xff1a;为什么new的时候要使用指针接收#xff1f;C基…前言
本博客旨在记录C学习过程中的一些细节知识理解由于问题的产生并非成体系所以前期的记录可能会无序一些。烦请读者参阅目录进行快速的问题定位与跳转 C基础与细节理解 前言正文部分C基础为什么new的时候要使用指针接收C基础如何优雅地用指针指向数组 正文部分
C基础为什么new的时候要使用指针接收
我们经常注意到在C编程中以下两种创建对象的形式是最为常见的
QPushButton *button1 new QPushButton(示例1);
QPushButton button2(示例2);我们知道方式一将对象创建在堆中并通过button1指向对象方式二则是将对象创建在栈上button2直接表示对象
为什么要这么做这都是出于更健全的内存维护考虑
方式一不允许使用非指针指向堆对象是为了应用智能指针在对象没有引用的时候自主的回收对象分配的内存否则需要显式的delete对象方式二由程序在对象作用域内自维护内存仍是安全的
综上在编程的时候我们只推荐使用以上两种对象创建方式并认为第二种要比第一种更优先在对象占用内存较小时
C基础如何优雅地用指针指向数组
在进行C编程的时候到底是选择一维指针还是二维指针指向某一个数组常常困扰着我们。其实有一个非常优雅的判断方式那就是确保指针维度与数组维度是一致的
我们首先需要明确一个概念左值右值在左值使用*或者[]用以提升维度在右值使用*或者[]用以降低维度。通过调整确保左右维度一致的赋值就是语法合规的。
我们以三维数组为例展示分别以一维指针和二维指针接收数组的形式
int exampleArr[2][2][2] {1,2,3,4,5,6};
//用一维数组来接收exampleArr[0]所指向的二维数组的第一个值即exampleArr[0][0];
int *point1 *exampleArr[0]; //等价于int *point1 exampleArr[0][0]
//用二维数组来接收exampleArr[0]所指向的二维数组即exampleArr[0];
int (*point2)[2] exampleArr[0];