首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C++ -确定const char*是指向字符串文字还是指向动态对象

const char* 可以指向字符串文字或者动态对象,取决于它所指向的内存区域。

  1. 字符串文字:当 const char* 指向字符串文字时,它指向的是一个常量字符串,即字符串文字在编译时就被确定下来,存储在只读内存区域。这意味着无法通过 const char* 修改字符串文字的内容。
  2. 动态对象:当 const char* 指向动态对象时,它指向的是一个动态分配的内存区域,通常是通过 new 或 malloc 函数分配的。这种情况下,const char* 可以用于指向任意的字符数组或字符串。

总结:

  • const char* 可以指向字符串文字或者动态对象。
  • 当指向字符串文字时,无法修改其内容。
  • 当指向动态对象时,可以通过 const char* 修改其内容。

腾讯云相关产品和产品介绍链接地址:

  • 云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 云数据库 MySQL 版:https://cloud.tencent.com/product/cdb_mysql
  • 云原生应用引擎(TKE):https://cloud.tencent.com/product/tke
  • 人工智能平台(AI Lab):https://cloud.tencent.com/product/ai
  • 物联网开发平台(IoT Explorer):https://cloud.tencent.com/product/iotexplorer
  • 移动应用开发平台(MADP):https://cloud.tencent.com/product/madp
  • 云存储(COS):https://cloud.tencent.com/product/cos
  • 区块链服务(BCS):https://cloud.tencent.com/product/bcs
  • 腾讯云元宇宙:https://cloud.tencent.com/solution/virtual-universe
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

c++基础之变量和基本类型

或者bool类型 如果需要使用一个不大的整数,必须指定是signed char 还是unsigned char 执行浮点数运算时使用double 类型转化 当在程序的某处我们使用了一种类型,而实际对象应该取另一种类型时...类型的变量 const与指针 指向const 类型变量的指针一个指向常量指针,它的本质还是一个普通的指针,只是它不允许通过指针修改变量的值, 这种类型的指针被称之为指针常量 指向const类型变量的指针与...有auto关键字并不能说明c++动态类型的语言,动态类型指,在运行过程中能随意改变变量所存储的数据的类型。...i应该是int i = "hello world"; //iint,只能存储int类型的数据,不能存储字符串数据 当初教科书上说的在编译期就决定类型的静态语言,运行期就决定类型的动态语言。...这个导致我理解有些偏差,我一直以为明确给出变量类型的静态。所以当初知道auto这个用法后,我一度以为c++要朝着动态类型语言这块发展。

1.5K30

C++面试题汇总 (一)

malloc与freeC++/C语言的标准库函数,new/deleteC++的运算符。它们都可用于申请动态内存和释放内存。...如果你在用delete时没用括号,delete就会认为指向单个对象,否则,它就会认为指向一个数组。   C++有哪些性质(面向对象特点) 封装,继承和多态。 ...,而在C++中,这些临时对象都是const类型的。...当子类重新定义了父类的虚函数后,父类指针根据赋给它的不同的子类指针,动态的调用属于子类的该函数,这样的函数调用在编译期间无法确定的(调用的子类的虚函数的地址无法给出)。...题:栈内存与文字常量区    char str1[] = "abc"; char str2[] = “abc”;  const char str3[] = “abc”;   const char str4

82220

C++ 运算符重载

要编写一个长度可变的字符串类 String,该类有一个 char* 类型的成员变量,用以指向动态分配的存储空间,该存储空间用来存放以\0结尾的字符串。...第 9 行的函数返回了指向 String 对象内部动态分配的存储空间的指针,但是不希望外部得到这个指针后修改其指向字符串的内容,因此将返回值设为 const char*。...这样,对象中存放的字符串就和 s 指向字符串一样了。分配空间时,要考虑到字符串结尾的\0,因此分配的字节数要比 strlen(s) 多 1。...两个对象的 str 成员变量都指向同一个地方,还是两个对象的 str 成员变量指向的内存空间中存放的内容相同?...第 24 行调用了标准库函数 atof 来将字符串转换为浮点数。该函数的原型float atof(const char *),它在 头文件中声明。

1.2K00

数组与指针

此常量表达式只能包含整型字面值常量、枚举常量或者用常量表达式初始化的整型const对象。非const变量以及要到运行阶段才知道其值的const变量都不能用于定义数组的维数。...C++虽然不允许定义长度为0的数组变量,但明确指出,调用new动态创建长度为0的数组合法的。      ...二、指针    指针指向某种类型对象的符合数据类型,用于数组的迭代器:指向数组中的一个元素。       1、指针是什么:指针就是用于指向对象,指针提供对其所指对象的间接访问。...可以在运行时动态的分配数组。可以在动态 确定数组的长度。c语言使用标准库的malloc和free在自由存储区中分配空间,C++使用new和delete实现该功能。        ...3、动态空间的释放          动态分配的内存最后必须进行释放,否则,内存最终将会逐渐耗尽。c++为指针提供deletep[]表达式来释放所指向的数组空间。

1.1K80

C++ 运算符重载

要编写一个长度可变的字符串类 String,该类有一个 char* 类型的成员变量,用以指向动态分配的存储空间,该存储空间用来存放以\0结尾的字符串。...第 9 行的函数返回了指向 String 对象内部动态分配的存储空间的指针,但是不希望外部得到这个指针后修改其指向字符串的内容,因此将返回值设为 const char*。...这样,对象中存放的字符串就和 s 指向字符串一样了。分配空间时,要考虑到字符串结尾的\0,因此分配的字节数要比 strlen(s) 多 1。...两个对象的 str 成员变量都指向同一个地方,还是两个对象的 str 成员变量指向的内存空间中存放的内容相同?...第 24 行调用了标准库函数 atof 来将字符串转换为浮点数。该函数的原型float atof(const char *),它在 头文件中声明。

1.1K20

C++重要知识点小结---3

智能指针一个行为类似指针但也提供其他功能的类。 智能指针类实现普通指针行为的类的区别在于:智能指针通常接收指向动态分配对象的指针并负责删除该对象。...2、撤销动态创建的对象     动态创建对象用完后,必须显示地将该对象占用的内存返回给自由存储区,delete表达式释放指针指向的地址空间。    ...如果指针指向不是new分配的内存地址,则在该指针上使用delete不合法的。 3、悬垂指针 悬垂指针指向曾经存放对象的内存,但该对象已经不再存在了!...当两个指针指向同一个动态创建的对象,删除就会发生错误。 3.类成员函数的重载、覆盖和隐藏区别?    ...函数外的str一个 静态定义的数组,因此其大小为6,函数内的str实际只是一个指向字符串的指针,没有任何额外的与数组相关的信息,因此siz eof作用于上只将其当指针看,一个指针为4个字节,因此返回

85861

c++面试选择题_C语言经典笔试题

malloc与freeC++/C语言的标准库函数,new/deleteC++的运算符。 它们都可用于申请动态内存和释放内存。...,而在C++中,这些临时对象都是const类型的。...当子类重新定义了父类的虚函数后,父类指针根据赋给它的不同的子类指针,动态的调用属于子类的该函数,这样的函数调用在编译期间无法确定的(调用的子类的虚函数的地址无法给出)。...(1) 修改内容上的差别 char a[] = “hello”; a[0] = ‘X’; char *p = “world”; // 注意p 指向常量字符串 p[0] = ‘X’; // 编译器不能发现该错误...第22题:栈内存与文字常量区 char str1[] = "abc";   char str2[] = "abc";   const char str3[] = "abc";   const

1K10

适合具备 C 语言基础的 C++ 教程(八)

100ask.taobao.com"这个字符串 const的,但是 str并不是 const的,所以我们在 char *str前加上 const,这样做会存在什么问题呢,更改后的代码如下所示: #include...image-20210220212322874 也就是说类中存在一个指针,这个指针不仅指向了虚函数表,而且指向了类信息,通过指针指向的类信息,我们可以知道当前这个对象是属于哪个类的,而且也能够知道当前这个类的继承信息...刚刚的两个动态类型转换均是由Human转换为 Englishman和chinese,属于是下行转换,也就是基类对象转换为派生类对象,那么对于将派生类对象转换为基类对象,也就是上行转换,又是如何实现的呢?...最后,关于动态类型转换收尾一下,动态类型转换,之所以被称之为动态的,也是因为其再程序运行过程中确定的转换类型,就如上面的test_eating()函数来说,只有运行到这里,才知道要转换的类型 Human...static_cast 静态类型转换跟动态类型转换则存在不同,它的转换则是由编译的时候就由编译器确定好了转换的类型。

38720

C++ Primer Plus 第四章 复合类型 学习笔记

*/ 在C++中,int*一种复合类型,指向int的指针。...❌警告:不能创建两个指向同一个内存块的指针。会增加错误地删除同一个内存块两次的可能性。 7.5 使用new创建动态数组 C++中,创建动态数组,只需要将数组的元素类型和元素数目告诉new即可。...在cout和多数C++表达式中,char数组名、char指针以及用引号括起来的字符串常量都被解释为字符串第一个字符的地址。 不要使用字符串常量或未被初始化的指针来接收输入。...要确定目标空间有足够的空间来存储副本。 8.3 使用new创建动态结构 对于在指定结构成员时,句点运算符和箭头运算符的选择时: 如果结构标识符结构名,则使用句点运算符(.)。...9.3 数组、vector和array的区别 无论数组、vector对象还是array对象,都可使用标准数组表示法来访问各个元素。

1.8K00

ios 笔试题3

24.动态绑定 —在运行时确定要调用的方法 动态绑定将调用方法的确定也推迟到运行时。在编译时,方法的调用并不和代码绑定 在一起,只有在消实发送出来之后,才确定被调用的代码。...当您向一个动态类型确定了的对象发送消息时,运行环境系统会通过接收者的isa指针定位对象的类,并以此为起点 确定被调用的方法,方法和消息动态绑定的。...而且,您不必在Objective-C 代码中做任何工作,就可以自动获取动态绑定的好处。您在每次发送消息时, 特别是当消息的接收者动态类型已经确定对象时,动态绑定就会例行而 透明地发生。...26.sprintf,strcpy,memcpy使用上有什 么要注意的地方 strcpy一个字符串拷贝的函数,它的函数原型为strcpy(char *dst, const char *src); 将...具备字符串拷贝功能的函数有memcpy,这是一个内存拷贝函数,它的函 数原型为memcpy(char *dst, const char* src, unsigned int len); 将长度为len

67110

适合具备 C 语言基础的 C++ 入门教程(八)

C++ 的类型转换 本节的核心内容还是讲解 C++的,上述中的 C语言部分是为了引出C++的强制转换,在上述中,我们提及了 C语言的隐式转换和强制转换,实际上在 C++中也有与之对应的内容,在 C++中跟强制转换效果一样的便是...意思"100ask.taobao.com"这个字符串 const的,但是 str并不是 const的,所以我们在 char *str前加上 const,这样做会存在什么问题呢,更改后的代码如下所示:...刚刚的两个动态类型转换均是由Human转换为 Englishman和chinese,属于是下行转换,也就是基类对象转换为派生类对象,那么对于将派生类对象转换为基类对象,也就是上行转换,又是如何实现的呢?...最后,关于动态类型转换收尾一下,动态类型转换,之所以被称之为动态的,也是因为其再程序运行过程中确定的转换类型,就如上面的test_eating()函数来说,只有运行到这里,才知道要转换的类型 Human...static_cast 静态类型转换跟动态类型转换则存在不同,它的转换则是由编译的时候就由编译器确定好了转换的类型。

35120

C++基础知识

虚函数和多态 多态的实现主要分为静态多态和动态多态,静态多态主要是重载,在编译的时候就已经确定动态多态用虚函数机制实现的,在运行期间动态绑定。...因此 C++默认的析构函数不是虚函数,而是只有当需要当作父类时,设置虚函数。 静态函数和虚函数 静态函数在编译的时候就已经确定运行时机,虚函数在运行的时候动态绑定。...代码解析 1.strcpy和strlen strcpy 字符串拷贝函数,原型: char *strcpy(char* dest, const char *src); 从 src 逐字节拷贝到 dest...保存在常量区,const 本来修饰 arr 指向的值,不能通过 arr 去修改,但是字符串“123”在常量区,本来就不能改变,所以加不加 const 效果都一样: const char * arr =...本来在栈上的,但是编译器可能会做某些优化,将其放到常量区: const char crr[] = "123"; (4)字符串 123 保存在栈区,可以通过 drr 去修改: char drr[]

1.4K32

CC++ 基本类型注意事项

char 类型的数据 不能确定它到底有符号还是无符号的,char有符号还是无符号取决于当前的编译器。...const和指针: 因为指针本身一个对象,指针指向的也是一个对象,因此const指针本身和const指针指向对象是两个独立的问题。这时候要考虑三种情况。...该指针对象不是 const 类型,指针所指向对象const ,这时 该指针所指向对象是不可以修改的,该指针可以修改指向其他的const对象。...该指针const类型,指针所指向对象也是const,这是 该指针将会一直指向一个不可修改的对象。...这里要注意的 decltype 的表达式如果一个指针的解引用,那么得到的将是一个引用类型。 decltype(*p) 将得到一个引用类型 预告:C/C++系列的下期 字符串与数组

44440

C++动态内存管理

,所以选择A; *char2一个拷贝常量字符串得到的字符数组,所以选择A; pChar3一个const修饰的指针变量,它指向一个常量字符串,所以选择A(注意,const修饰的变量常变量,只是因为const...修饰而具有了常属性,该变量并不会因为const修饰而改变存放的位置); *pChar3一个常量字符串,它存在于常量区,所以选择D; ptr1一个局部指针变量,它指向动态开辟的一块空间,所以选择A;...C++动态内存管理 在C语言中,动态内存的管理通过这几个函数来实现的: malloc() , 为大小为size字节的对象分配存储空间 , 此存储空间中的初始值不确定 ....更多详细有关C语言动态内存管理的知识可以移步:【C语言】内存的动态分配与释放 在C++中,动态内存的管理通过一对运算符来完成的: new,在动态内存中为对象分配空间并返回一个指向对象的指针...使用new动态分配和初始化对象 在堆空间分配的内存无名的,因此new无法为其分配的对象命名,而是返回一个指向对象的指针: int* pi = new int;//pi指向一个动态分配的

8810

C++面试题,阿里、百度、腾讯、华为、小米100道C++面试题目及答案

按照题意,我理解为初始化一个存放指针的数组,char *array[2]={“China”,”Beijing”};其含义初始化了一个有两个指向字符型数据的指针的数组,这两个指针分别指向字符串”China...正确答案: 在绝大多数情况下,程序的功能在编译的时候就确定下来的,我们称为静态特性。反之,如果程序的功能在运行时刻才确定下来的,则称为动态特性。...动态特性面向对象语言最强大的功能之一,因为它在语言层面上支持程序的可扩展性,而可扩展性软件设计追求的重要目标之一。 c++虚函数、抽象基类、动态绑定、多态构成了出色的动态特性。...错题解析:在绝大多数情况下, 程序的功能在编译的时候就确定下来的, 我们称之为静态特性。 反之, 如果程序的功能在运行时刻才能确定下来的, 则称之为动态特性。...按照题意,我理解为初始化一个存放指针的数组,char *array[2]={“China”,”Beijing”};其含义初始化了一个有两个指向字符型数据的指针的数组,这两个指针分别指向字符串”China

1.6K20

flexible array柔性数组、不定长的数据结构Struct详解

在C/C++中定义数组,一个定长的数据结构,最常用的定义如下 int arr[100]; 上述代码的中arr数组的长度已知,我们把上面的语句称之为声明语句,因为在编译期数组的长度已经确定了,我暂且发明了一个词来称呼这类数组...在日常编程中,有时需要在结构体中存放一个长度动态字符串(也可能其他数据类型),一般的做法,实在结构体中定义一个指针成员,这个指针成员指向字符串所在的动态内存空间。...先修知识 不完整类型 在C/C++中对于不完整类型的定义这样的: 不完整类型一种缺乏足够的信息去描述一个完整对象的类型 还是以数组的定义/声明为例子。...我们可以看到动态数组的内存块和字符串的内存两块不一样的内存。 折磨程序员的来了,我们在析构对象时,需要显式地在析构函数里面对指针p引用的内存进行释放,不然会出现内存泄露的情况。...还是回到上述的结构体 struct Test{ int a; char *p; }; 我们想把字符串和结构体连在一起的话,释放的内存时候就能够顺便把字符串的内存给释放掉了,看一看下面的代码

1.3K20

C++基本概念_c语言 c++区别

成员函数通过什么来区分不同对象的成员数据?为什么它能够区分? 答:通过this指针来区分的, 因为它指向对象的首地址。 7. C++编译器自动为类产生的四个缺省函数是什么?...const char *p, char *const p;的区别 如果const位于星号的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量; 如果const位于星号的右侧,const...1.成员限定符 2.虚基类 112什么叫静态关联,什么叫动态关联 在多态中,如果程序在编译阶段就能确定实际执行动作,则称静态关联, 如果等到程序运行才能确定动态关联。...( char *s1,char *s2)他的工作原理,扫描s2指向的内存,逐个字符付到s1所指向的内存,直到碰到”,因为str1结尾没有”,所以具有不确定性,不知道他后面还会付什么东东。...(1)不调用C++/C 的字符串库函数,请编写函数 strcat 答: VC源码: char * __cdecl strcat (char * dst, const char * src) { char

2.4K30

C 语言实现面向对象第一步--对象模型

Object Model》中提到了三种对象模型设计思路: 简单对象模型: 对象中只存储每个成员(包括函数和数据)的指针 表格驱动对象模型: 对象中存储两个指针,一个指向存储数据的表,一个指向存储函数指针的表...(虚函数的解决方案) C++ 实际对象模型: 对象存储 non-static 数据,static成员(数据和函数) 和 non-static 函数都单独存放(注意,并没有指针指向它们,这可以在编译时自动确定地址...), 还有一个虚表指针指向存储虚函数指针的表格(这个表第一个元素可能存放的 type_info object 以支持RTTI) 那这里选择对象只存储数据本身和函数指针。...我们需要一个创建对象和回收资源的方法,可以抄抄 C++ 的作业,C++ 中构造对象使用的new运算符,new运算符完成了 内存分配 + 调用类构造函数两件事。...; *(struct Class**)this = class; // 这一步实际上将每一个类构造出的对象,填充上指向类类型的指针 // 执行构造函数 if(class

97410

面试总结-C++

字符串可能自己定义的,也可能内存中随机的,该函数实际完成的功能从代表该字符串的第一个地址开始遍历,直到遇到结束符NULL。返回的长度大小不包括NULL。...当const在最左侧时,看const右侧。 常量指针和指针常量: 常量指针一个指针,读成常量的指针,指向一个只读变量。如int const *p或const int *p。...char a[] = “hello”; a[0] = ‘X’; char *p = “world”; // 注意p 指向常量字符串指向常量区 p[0] = ‘X’; // 编译器不能发现该错误,运行时错误...,避免外界干扰和不确定性访问。...(1)操作符new返回的指针类型严格与对象匹配,而不是void; (2)C中很多以void为参数的函数可以改写为C++模板函数,而模板支持类型检查的; (3)引入const关键字代替#define constants

2K11
领券