二级指针 杂记
admin
2024-04-07 08:34:28
0

二级指针

std::cout 与char*

指针和数组的特殊关系可以扩展到c-风格字符串。请看下面的代码
char flower[10] = “rose”;
cout << flower << “s are red\n”;
数组名是第一个元素的地址,因此cout语句中的flower是字符‘r’的地址。cout对象认为char的地址是字符串的地址,因此他打印带地址处的的字符,然后继续打印后面的字符,直到遇到‘\0’为止。总之,如果提供一个字符的地址给cout,它将从该字符开始打印,直到"\0"为止。

char a[5] = {'h','e','\0','l','l'};
only print  "he"

cannot convert ‘char (*)[2]’ to ‘char**’ in assignmentchar

error1: char[2]

char** p = nullptr;
char a[2] = {'q','\0'};
p = &a; // this cause error, cannot convert 'char (*)[2]' to 'char**' in assignment

这个错误是因为,对于数组a, a本身就表示数组的首地址,与&a的得到的结果是一样的。&a 并不是得到指向a pointer的地址, 还是a的地址.
p= a; // error cannot convert ‘char [2]’ to ‘char**’ in assignment

真想要**, 必须要 数组指针。

error2 string to char

void tower(int n,char a,char b,char c);
tower(4,"A","B","C");

error3

while (cDriveLetter <= 'Z'){if (0 < (dwDrivemap & 0x00000001L)){cDriveLetter;/*  char *p;p = new char[1];p= cDriveLetter;*/char arr[] = cDriveLetter;if (getfil((void*)arr) == 0){getfil((void*)arr);}//printf("%c:\\\n", cDriveLetter);//return cDriveLetter;elsecDriveLetter++;}cDriveLetter++;dwDrivemap = dwDrivemap >> 1;}

solution

char arr[] = &cDriveletter;
or
char arr[2];
arr[0] = cDriveLetter;
arr[1] = '\0';

char[] 是一种特定的类型,可以copy assign to char*, 但是反过来就会出现编译问题

class Student {char name[20];long number;
public:Student (char nm[20], long val) : name(nm), number(val) {}an error saying incompatible types in assignment of char* to char[20] 

Link

the error message is telling you that you cannot assign a pointer to an array. Fair enough. Doesn’t really matter anyway, since the language also doesn’t let you assign arrays to arrays.

改变另外array的方法,只有copy数据到那里。

二级指针 int ** 改变值

static int number = 99;void func(int** b);int* b = nullptr;  // empty 
func(&b);
cout << *b << endl; // b will have valuevoid func(int** b)
{// **b 是二级指针,我们关注的是他指向的内容。// 它的内容是一个指针,我们希望这个指针指向一个新的对象的地址*b = &number;
}

总结

当我们将指针作为函数的参数时候,我们在乎的是指针指向的内容。
如果不改变,我们需要用const修饰,如果改变,则不需要const。
当我们关注点是 改变指针所指的对象时,单纯的copy这个指针是解决不了问题的,因为copy的是指针指向的对象地址,并不是这个指针。
如果我们相对指针进行改变(指针的指向),必须要对这个指针取地址,才能操作其内容

二级指针与数组

当二级指针作为参数时,更多的情况下,他是一个指针数组。
这里涉及2点

  • 如何把定义的int* a[3] 转为参数 int** 传给函数
  • 如何销毁数组对象
void func(int** b);// define array
int* test[3];// pass it to func 2
func(test);        // the index
// pass it to func 2
funct(&test[0]);   // first number's index
// pass it to func3
int** casted = static_cast(test);

定义在栈上的数组,我们不需要删除。但是new出来的东西是需要删除的。
测试代码

class MyClass
{public:MyClass(int a): a(a){cout << "MyClass(int a): " << this->a << "\n" ;}MyClass(): a(0){cout << "MyClass(): \n";}~MyClass(){cout <<"~MyClass() \n";}int a ;
};
void factoryArray(MyClass** p, int num = 2)
{// at the next step, turn MyClass** to MyClass[]p[0] = new MyClass(0);p[1] = new MyClass(1);p[2] = new MyClass(2);
}
int main()
{MyClass* MC3[3];    // 放Myclass* 的数组factoryArray(&MC3[0]);  // MC3S数组的第一位的地址,这么输入是正确的 MC3 MC3[0]cout << MC3[0]->a <<"\n";cout << MC3[1]->a <<"\n";cout << MC3[2]->a <<"\n";for(int i=0;i<3;i++){delete MC3[i];}return 1;
}
打印信息是:
MyClass(int a): 0
MyClass(int a): 1
MyClass(int a): 2
0
1
2
~MyClass() 
~MyClass() 
~MyClass() 

相关内容

热门资讯

linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
C++ 机房预约系统(六):学... 8、 学生模块 8.1 学生子菜单、登录和注销 实现步骤: 在Student.cpp的...
A.机器学习入门算法(三):基... 机器学习算法(三):K近邻(k-nearest neigh...
数字温湿度传感器DHT11模块... 模块实例https://blog.csdn.net/qq_38393591/article/deta...
有限元三角形单元的等效节点力 文章目录前言一、重新复习一下有限元三角形单元的理论1、三角形单元的形函数(Nÿ...
Redis 所有支持的数据结构... Redis 是一种开源的基于键值对存储的 NoSQL 数据库,支持多种数据结构。以下是...
win下pytorch安装—c... 安装目录一、cuda安装1.1、cuda版本选择1.2、下载安装二、cudnn安装三、pytorch...
MySQL基础-多表查询 文章目录MySQL基础-多表查询一、案例及引入1、基础概念2、笛卡尔积的理解二、多表查询的分类1、等...
keil调试专题篇 调试的前提是需要连接调试器比如STLINK。 然后点击菜单或者快捷图标均可进入调试模式。 如果前面...
MATLAB | 全网最详细网... 一篇超超超长,超超超全面网络图绘制教程,本篇基本能讲清楚所有绘制要点&#...
IHome主页 - 让你的浏览... 随着互联网的发展,人们越来越离不开浏览器了。每天上班、学习、娱乐,浏览器...
TCP 协议 一、TCP 协议概念 TCP即传输控制协议(Transmission Control ...
营业执照的经营范围有哪些 营业执照的经营范围有哪些 经营范围是指企业可以从事的生产经营与服务项目,是进行公司注册...
C++ 可变体(variant... 一、可变体(variant) 基础用法 Union的问题: 无法知道当前使用的类型是什...
血压计语音芯片,电子医疗设备声... 语音电子血压计是带有语音提示功能的电子血压计,测量前至测量结果全程语音播报࿰...
MySQL OCP888题解0... 文章目录1、原题1.1、英文原题1.2、答案2、题目解析2.1、题干解析2.2、选项解析3、知识点3...
【2023-Pytorch-检... (肆十二想说的一些话)Yolo这个系列我们已经更新了大概一年的时间,现在基本的流程也走走通了,包含数...
实战项目:保险行业用户分类 这里写目录标题1、项目介绍1.1 行业背景1.2 数据介绍2、代码实现导入数据探索数据处理列标签名异...
记录--我在前端干工地(thr... 这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前段时间接触了Th...
43 openEuler搭建A... 文章目录43 openEuler搭建Apache服务器-配置文件说明和管理模块43.1 配置文件说明...