追忆lh 发表于 2014-12-16 20:19:53

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

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

问题:
1.指针数组这样的定义和赋值用法是什么意思?const char* const letters[] = {"A","B","C","D"};
2.letters是一个数组,他的每个元素都是指向一个常量字符的指针。既然这样,那么letters就是一个指针啊,cout <<letters<<endl;为什么会输出C

小菜变白菜 发表于 2014-12-16 22:01:37

第一个问题:
count是一个常量的修饰符,在里面用了两个,前面一个是修饰指针数组的,说明指针指向的地址不可变;第二个是说明数组里面的内容不可变,也就是不能改变letter【】里面的值!
第二个问题
你可以在letter【2】前面加上“*”也能输出c,但是为什么,我好像也不懂,同新手!

只為不段前行 发表于 2014-12-17 13:05:26

2L回答了你的第一个问题
我来回答第二个
我觉得 这是字符串吧 你看你的头文件
你可以尝试改下程序
比如这样#include <iostream>
#include <string>
using namespace std;
int main()
{
constchar*const letters[] = {"A","B","Cddddd","D"};
cout <<*letters<<endl;
return 0;
}

答案是 c 因为 *letters 意思就是*letters 也就是第三个字符串的第一个字符因为定义的 是char
如果把* 去掉那么是Cddddd直接指向一个字符串
再这样改
#include <iostream>
#include <string>
using namespace std;
int main()
{
   const string const letters[] = {"A","B","Cddddd","D"};
cout <<letters<<endl;
return 0;
}
你又会发现 这里letters指向的也是Cddddd 但是加了* 就出错了因为定义的是string 无法获取中间某个位子的字符
这里你就有疑问了 为了使一个指针呢?
因为字符串存放在一个特定的数据段 只能用指针索取一个字符串 也就是只能读不能被一个字符一个字符的写出来

追忆lh 发表于 2014-12-17 19:30:48

只為不段前行 发表于 2014-12-17 13:05
2L回答了你的第一个问题
我来回答第二个
我觉得 这是字符串吧 你看你的头文件


似乎有点懂了,我在查查资料去,谢啦!:handshake

只為不段前行 发表于 2014-12-18 11:18:58

追忆lh 发表于 2014-12-17 19:30
似乎有点懂了,我在查查资料去,谢啦!

其实 很多 东西 需要用自己的方法去理解别人的理解你不一定懂 所以你要多尝试 实验 从实验中找到答案

qinyaoqian 发表于 2014-12-18 23:51:06

页: [1]
查看完整版本: C++指针数组的问题,求教啊