nkakaxi
2014-11-19 15:10
采纳率: 42.9%
浏览 2.8k

C++ 指针与字符串的区别

#include "stdafx.h"
#include
#include
using namespace std;

int main()
{
char *str = "hi,guys!";//若将*str替换为str[]便成功,为什么呢?
strcpy_s(str,6,"aaaaa");
cout << str << endl;

system("PAUSE");
return 0;

}

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

7条回答 默认 最新

  • jiangzuzai 2014-11-20 12:38
    已采纳

    char *str;这代表声明一个字符串指针,默认值为空, 即nulll。
    需要先为它开辟内存空间才行;
    修改如下:
    char *str=new char[10];
    str="hi,guys!".
    而char str[]="hi,guys!";这是声明字符串的方法。

    点赞 打赏 评论
  • snsn1984 2014-11-20 01:47

    char *是一个指向字符的指针,而这里"hi,guys!"是一个字符串,所以会有问题。
    而char str[]是一个字符数组,所以使用它来存储"hi,guys!"没有问题。

    点赞 打赏 评论
  • 91program 2014-11-20 02:02

    由于 *str 指向的是常量型字符串 "hi,guys!"; ,所以常量的内容不允许修改。
    用 str[] 是因为编译器给它分配了空间,它的空间上的内容是可修改的。

    点赞 打赏 评论
  • lx624909677 2014-11-20 02:09

    第一个是没有空间的,只是指针指向了一个字符串空间,第二个会根据字符串长度自动来开辟空间

    点赞 打赏 评论
  • 钝悟 2014-11-20 02:28

    “hi, guys!”存储在内存中的 字符串常量区,不可以修改;str 是一个指针变量,存储在堆中。
    可是一旦改成:
    char str1[] ="hi,guys!";
    char* str=str1;
    strcpy(str,"aaaaa");
    就可以运行,因为字符数组是在栈中开辟的一块连续内存,可以修改。

    点赞 打赏 评论
  • neujie 2014-11-20 05:48

    char *str = "hi,guys!"; 表示你定义了一个指针指向一个字符串,而这个str是没有空间的,是不允许修改的。
    char str[] = "hi,guys!"; 表示你定义了一个长度是strlen("hi,guys!")+1的字符数组,并且初始化为"hi,guys!",这个字符串是可以修改的。但是长度不能超过定义的长度。

    简单理解:指针是没有存储空间的,他只能指向一个地址而已。
    比喻:指针是支付宝中的当面付,有网络时,是可以的。

    点赞 打赏 评论
  • Colin丶 2014-11-20 07:54

    由于 *str 指向的是常量型字符串 "hi,guys!"; ,所以常量的内容不允许修改。
    用 str[] 是因为编译器给它分配了空间,它的空间上的内容是可修改的。

    点赞 打赏 评论

相关推荐 更多相似问题