char *p="" char p[]=""区别在那?

derek7 2005-02-22 07:33:55
char *p="" char p[]=""区别在那?
...全文
404 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
哈哈哈啊002 2005-02-24
  • 打赏
  • 举报
回复
sjssunjs(大海) 说的对
zhanghk 2005-02-24
  • 打赏
  • 举报
回复
p是指向全局内存的指针,这个内存是exe映射时的相应的地址,所以这样用时最好加上const,即const char *p = "";
第二个timepalette(时间调色板) 说的对,是在栈内的一块内存,要做拷贝,所以效率会慢一点。
LoveCreatesBeauty 2005-02-24
  • 打赏
  • 举报
回复
http://www.eskimo.com/~scs/c-faq/q1.32.html
tokens 2005-02-23
  • 打赏
  • 举报
回复
编译通过并不等于它不是非法的..
如char *p;
p = 0;//地址为0也通过,
*p = 'a';//但你运行看看.
sjssunjs 2005-02-23
  • 打赏
  • 举报
回复
实质是指针与数组的区别,char *p="" 定义了指向char型的指针,该指针所指的内存存储的值为空。char p[]=""定义了字符数组,该数组的长度为零,内容为空。虽然指针和数组在一些对其内的数据操作上有相似的地方,但是二者的差别是本质的:指针是动态的分配存储空间,数组是静态的分配空间,并且指针所分配的空间是可以改变大小的,数组的空间一旦分配,就不能改变大小!
gooderfeng 2005-02-23
  • 打赏
  • 举报
回复
在gcc上char*是char const*型别,不能更改字符.

to shikn

p[] *p不是都是转成*(p + 0) 吗
或者p[i] *p[i] 转成*(p + i)
jiajie828 2005-02-23
  • 打赏
  • 举报
回复
第一个指针指向常量!不允放修改的
ybt631 2005-02-23
  • 打赏
  • 举报
回复
char *p=" " 就是const char *p
char p[]=" " char *const p;
疯狂低调 2005-02-23
  • 打赏
  • 举报
回复
没错,的确通过了,但运行中出现错误!

看来 char* p="";
产生的是常量指针!
zjyu88 2005-02-22
  • 打赏
  • 举报
回复
的确能编译过..但在运行其间出问题...
我用的是DEV C++
zjyu88 2005-02-22
  • 打赏
  • 举报
回复
char *p=":ksj";它是一个const字符串,,所以它应该不能p[0]='s';的修改操作..
楼上的既然能通过,我有点不解,是编译器的问题吗?
pcboyxhy 2005-02-22
  • 打赏
  • 举报
回复
#include <iostream>
#include <cstdlib>

using namespace std;

int main(int argc, char *argv[])
{
char *p=":ksj";
p[0]='\0';//ok
char c;
p=&c;//ok
system("PAUSE");
return 0;
}

编译通过。
不知 Leung 说的不合法是什么意思。
shikn 2005-02-22
  • 打赏
  • 举报
回复
除了分配的存储空间不一样, 还可以看一下《C专家编程》这本书,上面讲了,p[]和*p本身也不同, 取*p的过程要比取p[]多一个步骤, 取*p,显要取到p的值,在取*p, 取p[]可以直接取, 效率稍稍有些差别,不过多一个汇编语句, 影响不大,不过传递参数的时候, 声名和定义就要注意了.
Leung_ 2005-02-22
  • 打赏
  • 举报
回复
对第一个p的修改是非法的: p[0] = 'd';

对第二个p的修改是合法的: p[0] = 'd';
timepalette 2005-02-22
  • 打赏
  • 举报
回复
char p[] = "abc",是在栈上分配4个字节内存给p,再把"abc"拷进去。p的指向的地址是在栈上的(sp附近)
char *p = "abc", "abc"在编译时被作为一个全局变量,是不在栈上的,p指向的地址不在栈上。最好不要这样写。

64,654

社区成员

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

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