char *str 和 char str[] 区别

gejixin 2008-06-04 07:27:08

#include<stdlib.h>
#include<iostream.h>
void main()
{
char str[]="gejixin";
memset(str,'*',4);
cout<<str+2;
}

没有错误
#include<stdlib.h>
#include<iostream.h>
void main()
{
char *str="gejixin";
memset(str,'*',4);
cout<<str+2;
}

换成char *后则显示内存为不能read,这是为什么,这两个还不一样吗?
...全文
251 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
用户 昵称 2008-06-04
  • 打赏
  • 举报
回复
C的基础。
coolerhero 2008-06-04
  • 打赏
  • 举报
回复

char str[]; // 是个字符数组,其中的元素可以被修改

char *str; // 是个字符指针,指向一个地址,不赋值,只能修改地址

wglacier 2008-06-04
  • 打赏
  • 举报
回复
楼上的代码写的有点儿问题
1
char*str=new char[8];
str="gejixin"; //这句运行之后,上边new的内存就“丢”了,str指向一个只读内存

2
str[8]='\0'; //楼上的本意可能是想修改new的那个缓冲区,但有两个问题,一是越界,二是现在指向的是只读内存了

3
memset(str,'*',4); //问题同上,只读区域不可修改

4
cout < <str+2; // << 应该连着写

5
delete str; // 因为现在str指向只读内存,不能用delete释放

greatws 2008-06-04
  • 打赏
  • 举报
回复
char *str="gejixin";
实际上是指向常量存储区的,也就是const char *str="gejixin";

内容是不允许修改的
god_niuniu 2008-06-04
  • 打赏
  • 举报
回复
这个很简单,char str[]="gejixin"; 这个是个数组 数组你当然可以像 str[2]=**这个赋值了, memset 做的也是类似的工作
而 char *str="gejixin"; "gejixin"是个字面值常量, 不允许修改。

关于 char [] 和 char *的区别 在于: char []分配的是连续的空间, 而char * 只是个指针 指向已经初始化过的字面值常量
daneyzoujun 2008-06-04
  • 打赏
  • 举报
回复
不一样了,因为使用指针要动态分配内存!
#include<stdlib.h>
#include<iostream.h>
void main()
{
char*str=new char[8];
str="gejixin";
str[8]='\0';
memset(str,'*',4);
cout<<str+2;
delete str;
}
这样就可以了;
wglacier 2008-06-04
  • 打赏
  • 举报
回复
char str[]="gejixin";
str是一个普通的数组

char *str="gejixin";
str是一个指针,指向一个常量 "gejixin",那个是不允许修改的

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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