首页 > 其他分享 >指针的初始化与new

指针的初始化与new

时间:2023-03-20 16:13:29浏览次数:45  
标签:初始化 string pb char 数组 new 指针

指针的初始化

C++ 中的字符串常量存储为字符数组,返回的地址是const char[]类型。即字符串常量被视为指向字符数组的指针,所以可以用字符串常量对char类型的指针进行初始化。

char* p[] = {"char1", "char2", "char3"}; //数组内含有3个指针 —— 指针数组

而 C++ 中的string类型的变量,返回的是一个string类型的对象,如果向初始化一个string类型的指针,应该

string str1 = "string1";
char* p_str = &str1;

string str[3] = {"string_1", "string_2", "string_3"};
string* pa_str = str;

string* pb_str = new string[3];
pb_str[0] = "string4";
pb_str[1] = "string5";
pb_str[2] = "string6";
delete [] pb_str;    

强制类型转换是临时的,也就不能下面这样初始化指针:

string* a[3] = {&string("string1"), &string("string2"), &string("string3")};

因为string对象是临时对象,其生命周期只存在于当前语句中。因此,将其地址存储在数组中可能导致指向无效的内存,从而导致未定义的行为。

new参与的初始化

string* a[3] = new string[3];  // 合法行为,每个指针依次指向数组中的string元素
char* a[3] = new char[3]; // 非法行为。

第1条语句是创建了3个指针,每个指针指向一个string的内存地址。而第2条语句却是非法的,因为基本数据类型不能通过数组初始化,而类类型却可以。

string* a[3] = new string[3] {"string1", "string2", "string3"};
// 可以使用数组下标的形式,访问其中元素。

string* b = new string[3]; // 动态数组
b[0] = "string4";
b[1] = "string5";
b[2] = "string6";

a[0]a[1]是两个指针,而b[0]b[1]b指针的移动。

char* pa = new char[3];
char (*pb)[4] = new char[3][4];
char* pc[3];
for (int i = 0; i < 3; i++){
    pc[i] = new char[N];
}

char* pc[3] 定义了一个指针数组,其中每个元素都是 char* 类型的指针。这意味着 pc 数组中的每个元素都指向一个 char 类型的内存地址,这些地址可以是任何地方。

char(*p)[4] 定义了一个指向 char 数组的指针。这意味着 pb 指针指向一个长度为 4 的 char 数组,并且指针类型为 char(*)[4]。这个数组中的每个元素都是 char 类型的。因此,char(*pb)[4] 可以用于指向二维字符数组的第一个元素,其中每个字符串都有固定的长度 4。

总之,char* pc[3] 是一个指针数组,而 char(*pb)[4] 是一个指向字符数组的指针。

欢迎各位的讨论与指正

标签:初始化,string,pb,char,数组,new,指针
From: https://www.cnblogs.com/Wendy-day/p/17236600.html

相关文章

  • 失去控制“野指针”
    今日份学习“野指针”本文简介:介绍野指针,什么情况会生产野指针,我们该如何避免野指针问题。一,定义野指针:是指针指向的位置是不可知的,随机的,不正确的,没有明确限制的。我们在ma......
  • CentOS 7.X初始化手册
    一系统初始化操作系统版本为:CentOS_x86-x647.4.17081配置域名解析cat>>/etc/resolv.conf<<EOFnameserver202.106.0.20EOF2基础库安装yum-yinstallwgetsysstatb......
  • Qt5.12实战之QByteArray与字符指针及字符串转换
    示例源码:#include<QCoreApplication>#include<QDebug>#include<QTextStream>staticQTextStreamcout(stdout,QIODevice::WriteOnly);#include<iostream>#include......
  • 双指针算法
    一、常见类型(1)对于一个序列,用两个指针维护一段区间(如:快排) (2)对于两个序列,维护某种次序,比如归并排序中合并两个有序序列的操作(如:归并排序) 二、模板1for(i......
  • 初始指针
    指针是什么?在计算机科学中,指针(pointer)编程语言的一个对象,利用地址,它的值直接指向存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量......
  • C++面向对象、初始化列表、static const
    面向对象OOP​ OOP的四大特征:抽象、封装、继承、多态​ 对象内存大小只和成员变量有关,不同对象的变量都有自己的空间,成员方法是所有对象共享的,一旦编译会添加this指针,......
  • numpy数组初始化方法总结
    1使用list初始化a=np.array([[1,2,3],[4,5,6]],dtype='float32')#a=[[1.2.3.],[4.5.6.]]2赋值与复制(1)赋值a=np.array([1,2,3])b=aprint(bisa)#Trueb[0]......
  • np.newaxis的用法
    1前言np.newaxis的意思是给数组新增一个维度。“python中矩阵切片维数微秒变化”中介绍了矩阵切片有时候会降低矩阵维度,为保证维度不变,可以用np.newaxis新增一个维度。2......
  • 委托-new
    通过预设一个委托(无参/无方法),可以让以后的窗体(或者其他)再写方法,把参数或值传递过来。    ......
  • Mac工作环境初始化
    目录触摸板配置命令行配置常用软件日常办公文件编辑日常开发开发环境配置集成环境配置IDEA配置优化IDEA默认配置插件常用功能配置VSCode配置初始配置补充快捷键配置文件远......