鱼C论坛

 找回密码
 立即注册
查看: 1598|回复: 5

C++指针数组的问题,求教啊

[复制链接]
发表于 2014-12-16 20:19:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
代码:
#include <iostream>
#include <string>
using namespace std;
int main()
{
    const char* const letters[] = {"A","B","C","D"};
cout <<letters[2]<<endl;
return 0;
}
运行结果为:C

问题:
1.指针数组这样的定义和赋值用法是什么意思?const char* const letters[] = {"A","B","C","D"};
2.letters是一个数组,他的每个元素都是指向一个常量字符的指针。既然这样,那么letters[2]就是一个指针啊,cout <<letters[2]<<endl;为什么会输出C
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-12-16 22:01:37 | 显示全部楼层

回帖奖励 +1 鱼币

第一个问题:
count是一个常量的修饰符,在里面用了两个,前面一个是修饰指针数组的,说明指针指向的地址不可变;第二个是说明数组里面的内容不可变,也就是不能改变letter【】里面的值!
第二个问题
你可以在letter【2】前面加上“*”也能输出c,但是为什么,我好像也不懂,同新手!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-12-17 13:05:26 | 显示全部楼层
2L回答了你的第一个问题
我来回答第二个
我觉得 这是字符串吧 你看你的头文件  
你可以尝试改下程序
比如这样
#include <iostream>
#include <string>
using namespace std;
int main()
{
  const  char*  const letters[] = {"A","B","Cddddd","D"};
cout <<*letters[2]<<endl;
return 0;
}
答案是 c 因为 *letters[2] 意思就是*letters[2][0] 也就是第三个字符串的第一个字符因为定义的 是char
如果把* 去掉  那么是Cddddd  直接指向一个字符串
再这样改
#include <iostream>
#include <string>
using namespace std;
int main()
{
   const string const letters[] = {"A","B","Cddddd","D"};
cout <<letters[2]<<endl;
return 0;
}
你又会发现 这里letters[2]指向的也是Cddddd 但是加了* 就出错了因为定义的是string 无法获取中间某个位子的字符
这里你就有疑问了 为了使一个指针呢?
因为字符串存放在一个特定的数据段 只能用指针索取一个字符串 也就是只能读不能被一个字符一个字符的写出来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-12-17 19:30:48 | 显示全部楼层
只為不段前行 发表于 2014-12-17 13:05
2L回答了你的第一个问题
我来回答第二个
我觉得 这是字符串吧 你看你的头文件  

似乎有点懂了,我在查查资料去,谢啦!:handshake
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-12-18 11:18:58 | 显示全部楼层
追忆lh 发表于 2014-12-17 19:30
似乎有点懂了,我在查查资料去,谢啦!

其实 很多 东西 需要用自己的方法去理解  别人的理解你不一定懂 所以你要多尝试 实验 从实验中找到答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

头像被屏蔽
发表于 2014-12-18 23:51:06 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-18 13:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表