社区
C++ 语言
帖子详情
char *p="" char p[]=""区别在那?
derek7
2005-02-22 07:33:55
char *p="" char p[]=""区别在那?
...全文
421
15
打赏
收藏
char *p="" char p[]=""区别在那?
char *p="" char p[]=""区别在那?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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指向的地址不在栈上。最好不要这样写。
关于
char
*p = "";的思考
偶然记起在浏览别人的代码的时候发现有一处指针的初始化时这样写的:
char
*p = ""; 首先我们知道
char
*p = NULL;的意思是将p初始化为NULL(和'\0', 0)的意思一样,防止使用野指针p。不过
char
*p = "";又是什么意思...
关于C语言
char
*p =“abc“ 的理解
后来经常看到
char
*p =“abc”; 这样的写法,产生疑惑:“abc”也是一串地址吗?32位系统下一个指针占4个字节,如果赋值时,“abc” 双引号里面的字母有成百上千个,那4个字节装得下吗? 解答 C语言里没有字符串...
char
*p="abc" 与
char
p[]="abc" 的
区别
char
*get_string_1(){
char
p[] = "hello world!";return p;}
char
*get_string_2(){
char
*p = "hello world!";return p;}int main(){
char
*p;p = get_string_1();printf("g...
char
*p与
char
**p
char
*p与
char
**p
char
str[6]={‘H’,‘E’,‘L’,‘L’,‘O’,’\0’}
char
*p=str
char
** p=&p
char
*p相当于p取了str的地址, * p才是str的内容。...假若str是你的钱包,那么
char
* p 中的p在这里就是存...
关于C/C++中int *p=10 为什么不行,而
char
*s=“wbq“却可以
应该是因为int* p=10是直接把指针的值赋予10,也就是说p指向10这个地址,而
char
*s="wbq"所做的步骤比*p=10多几步,那就是自动在常量区开辟一个空间然后放入"wbq\0"之后把相应的地址返回给*s,所以这2个赋值是不一样的...
C++ 语言
65,206
社区成员
250,519
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章