字符串字面值,是什么指针?

Primer_CC 2014-05-30 08:48:55
《C++Primer》第四版
4.3 C风格字符串
字符串字面值的类型就是const char 类型的数组。

--------
问题:
1.数组名(在表达式),是什么指针?
2.字符串字面值,是数组。
那么,它又是什么指针?
...全文
477 30 打赏 收藏 转发到动态 举报
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
Orange_ou 2014-06-17
  • 打赏
  • 举报
回复
int *ptr = "222222";
 “初始化”: 无法从“const char [7]”转换为“int *”
VC2010上的报错 卤煮看看能不能回答你的问题 估计GCC也差不多
lin5161678 2014-06-17
  • 打赏
  • 举报
回复
引用 28 楼 :
数组名是一个指向一段连续空间首地址的指针(
先弄明白 数组是一种独立的数据类型 如果你有学过Java 可能比较好理解 其实 C里面的数组是一种数据类型而不是其他的什么 而指针是另外一种完全不一样的数据类型 别总混淆这两者 常见的是 数组名在某些特定情况下隐式转换为指针 而不是数组名是指针
引用 28 楼 :
*p=’a'; //这样写是不行的,因为这是要修改字符串字面值中的1字符,这样写,编译器会直接报错;
这样写的确不行 但是你需要搞清楚 并不是编译器报错 编译器不会报告Error 最多是一个warning 出错的情况 一般是在运行期 运行期出现的问题 已经不是编译器干涉领域了 而且 并不是一定会出错 企图修改字符串字面量 只是未定义行为 某些情况下 可以造成编译通过 运行通过 输出结果看起来正常
linux_hsylar 2014-06-07
  • 打赏
  • 举报
回复
1.数组名(在表达式),是什么指针? 2.字符串字面值,是数组。 问题一: 数组名是一个指向一段连续空间首地址的指针(各种基本数据类型,自定义结构体以及类对象的连续空间),因为它本质上可以看成一个常指针,所以它的指向不能改变,也就是说它的生命周期内它永远为这块连续空间服务; 问题二: 字符串字面值是一个常量数据,在代码编译阶段,字符串字面值会被放到进程的代码区(更确切是常量区),它是常量,所以不能改变它的值,即使用指针变量指向它,也不能通过指针修改字符串字面值中的值: 如: char *p="12345“//这行说明在栈中定义的一个char型指针变量,它指向常量区中的字符串字面值”123456“; *p=’a'; //这样写是不行的,因为这是要修改字符串字面值中的1字符,这样写,编译器会直接报错; //p指向的是这个字符串的首地址,也是1的地址,*p就是获取首元素的值,*p=’a',是要修改1字符的值,可能麽?不可能,它是常量; p="a" //这样写后,是ok的,"a"也是字符串字面值,只不过它的元素是‘a'和'\0’; p这时修改的不是"12345"中的字符值,而是改变它的指向,他现在指向的是"a"; 注意: ' '里面是字符,” “里面是字符串(这些东西都会放到程序所在进程中的常量区);
Primer_CC 2014-06-06
  • 打赏
  • 举报
回复
ForestDB: 你把英文版原话,翻译成中文,怎样?
ForestDB 2014-06-05
  • 打赏
  • 举报
回复
懂的人被你叫滚了。 "abc"是const char *类型 指针不是必需由&才能得到的 书不是这么读的,何况是这种翻译的 如果可能,去读英文的
Primer_CC 2014-06-05
  • 打赏
  • 举报
回复
各位: 字符串字面值,指针类型是: A.char *p B.char const *p C.char *const p D.char *const *p
l5250926 2014-06-05
  • 打赏
  • 举报
回复
数组名是个地址 是个常量 指针变量可以指向一个地址
time_exceed 2014-06-05
  • 打赏
  • 举报
回复
1.数组名(在表达式),是什么指针? 2.字符串字面值,是数组。 那么,它又是什么指针? 1.数组名是指向数组的首地址的指针,是个常量指针,常量指针的地址不可变,但是其指向的内容可以变 2.字符串字面值,是指const char 类型的数组,是个指针常量,指向的内容不变,比如const char *p="hello world!",这时候,不能修改*p指向的内容
Primer_CC 2014-06-05
  • 打赏
  • 举报
回复
lin5161678: 终于被我气死了!
rmaly 2014-06-05
  • 打赏
  • 举报
回复
数组名是常量指针,就是指针地址不可变;字符串字面值是指向常量的指针,指向的内容不可修改
lin5161678 2014-06-05
  • 打赏
  • 举报
回复
引用 21 楼 Primer_CC 的回复:
lin5161678: 乱七八糟!
乱七八糟的唯一原因是你太笨 脑子太慢看不懂 真知灼见
Primer_CC 2014-06-05
  • 打赏
  • 举报
回复
lin5161678: 乱七八糟!
Primer_CC 2014-06-04
  • 打赏
  • 举报
回复
这个谁说说呢?
lin5161678 2014-05-30
  • 打赏
  • 举报
回复
引用 11 楼 Primer_CC 的回复:
10楼:

const char *cp="C++";
书上实例。 字符串字面值:“C++”,并没有&取地址操作。 如果,它不是隐式转换为指针。 那么,它怎么可能赋值给一个指针变量:*cp 呢?
谁告诉你 & 隐式转换的 这里这个数组就是隐式转换为 指针 double m = 10; 这里这个10从int 隐式转换为 double 不需要其他什么东西
cao_julians 2014-05-30
  • 打赏
  • 举报
回复
发现太多的人涉及到指针,只有一个概念--指针变量,必须是一存储了sth的实体。 设p是指向数组元素的指针,p=p+1是常见的赋值表达式,问p+1是什么?用*(p+1)访问元素时(p+1)叫什么?能把(p+1)叫指针变量吗? 指针的概念应该是指针变量、指针常量、指针不变量、指针表达式等多个概念的集合 指针变量只是指针的一种表现形式
赵4老师 2014-05-30
  • 打赏
  • 举报
回复
电脑内存或文件内容只是一个一维二进制字节数组及其对应的二进制地址; 人脑才将电脑内存或文件内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……
Primer_CC 2014-05-30
  • 打赏
  • 举报
回复
10楼:

const char *cp="C++";
书上实例。 字符串字面值:“C++”,并没有&取地址操作。 如果,它不是隐式转换为指针。 那么,它怎么可能赋值给一个指针变量:*cp 呢?
lin5161678 2014-05-30
  • 打赏
  • 举报
回复
1.数组名(在表达式),是什么指针? 在表达式中 有时候根本不是指针 既然 类型是const char类型数组 那么在需要会隐式转换为指针的时候 自然是 const char* 2.字符串字面值,是数组。 那么,它又是什么指针? 既然 是数据 那它就不会是什么指针 苹果是水果 那么, 它又是什么什么品种的狗 你不觉得滑稽吗
赵4老师 2014-05-30
  • 打赏
  • 举报
回复
#pragma comment(linker,"/SECTION:.rdata,RW")
//加这句可以让常量区可写,后果自负!
不要纠结各种常量了,这个世界上唯一不变的就是变化。用API WriteProcessMemory还能修改正运行的其它进程的内存里面的所谓常量呢!
lin5161678 2014-05-30
  • 打赏
  • 举报
回复
说得明明白白 那就是数组了 数组不是指针 字符串字面值的类型 不是指针
加载更多回复(9)

64,666

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧