小的指针问题

realfishhook 2005-09-05 09:30:56
char *p=NULL;
p="abc";

这个代码的执行是不是这样的?
1、p指向空;
2、为"abc"分配空间;
3、将"abc"的首地址给p;

这样写,跟下面这样写有什么区别吗?
char *p=NULL;
char a[]={'a','b','c','\n'};
p=a;

那如果写成这样会不会有问题呢?
#define s "abc"
.....
char *p=NULL;
p=s;
是不是这样不可能行得通?s在预编译的时候,根本没有地址?

谢谢
...全文
618 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
vikingemail 2005-09-16
  • 打赏
  • 举报
回复
TO: ZXEOC(似的)
char *p=NULL;
这一句就使得p成为野指针,除非后面给p赋值,使它指向别处,否则它就一直是野指针

请问野指针的定义?
leifen 2005-09-15
  • 打赏
  • 举报
回复
来晚了 呵呵
ZXEOC 2005-09-15
  • 打赏
  • 举报
回复
char *p=NULL;
这一句就使得p成为野指针,除非后面给p赋值,使它指向别处,否则它就一直是野指针。
snowbirdfly 2005-09-15
  • 打赏
  • 举报
回复
char *p=NULL;
这个是给指针初始化为空~~
lin_jianren 2005-09-15
  • 打赏
  • 举报
回复
cjf28040(hero) 在下不懂:为什么p指向一个无效的指针?
goyi 2005-09-09
  • 打赏
  • 举报
回复
好的啊
hjf1010 2005-09-09
  • 打赏
  • 举报
回复
cjf28040(hero) ( ) :而对于一,三。p初始化为null,然后执行p = "abc","abc"会产生一个临时变量。在执行完这句后就释放了。所以p指向一个无效的指针。


为什么三是野指针呢??
#define s "abc"语句在全局静态内存区定义,什么时候会变成野指针??

对于第一种情况,可能会造成野指针,但是不根据楼主程序上下文,你怎么断定就是野指针??
还让被人多看看书,你自己也要多看看书.不要对一些概念一知半解救教训别人.
palm_civet 2005-09-09
  • 打赏
  • 举报
回复
应该是这样吧
XINYONGHUCSDN 2005-09-09
  • 打赏
  • 举报
回复
一和三之间没有区别。
回答楼主的问题,三种方法都能行得通,编译的时候不会有问题!
-----------------------------------
char *p=NULL;
p="abc";
这个代码的执行是不是这样的?
1、p指向空;
2、为"abc"分配空间;
3、将"abc"的首地址给p;
-----------------------------------
是这样的,p指向的是一个常量字符串,也就是说,只要你后面的操作不是会改变p指向的内存内容的操作,就不会有问题,即:p指向的字符串是只读的。

-----------------------------------
这样写,跟下面这样写有什么区别吗?
char *p=NULL;
char a[]={'a','b','c','\n'};
p=a;
-----------------------------------
有区别,此时p指向的内容存储在堆栈中。函数退出或超出其生存期后就无效。

-----------------------------------
那如果写成这样会不会有问题呢?
#define s "abc"
.....
char *p=NULL;
p=s;
是不是这样不可能行得通?s在预编译的时候,根本没有地址?
-----------------------------------
这也行得通。再预处理器处理以后对编译器来说跟一没什么区别!
cjf28040 2005-09-09
  • 打赏
  • 举报
回复
to hjf1010(黑色狂人)
第一,我不是教训你,只是作为前辈的一个意见。
第二,对于你,我不知道你的编程是不是自学的,如果不是你去买块豆腐吧。
#define s "abc"语句在全局静态内存区定义。对于这句话的正确性,如果你是学生你问问你老师去,如果你工作了,千万别问你的上司,你会被辞退的。谦虚一点吧
realfishhook 2005-09-08
  • 打赏
  • 举报
回复
那就是说1,3都不安全了?
2是安全的?
fytzzh 2005-09-08
  • 打赏
  • 举报
回复
calloc malloc动态分配内存
bugebear3 2005-09-08
  • 打赏
  • 举报
回复
'\n'应该为'\0'
cjf28040 2005-09-06
  • 打赏
  • 举报
回复
在c或c++中,字符串常量可以在初始化时设置:
char *p = "abc";

而对于一,三。p初始化为null,然后执行p = "abc","abc"会产生一个临时变量。在执行完这句后就释放了。所以p指向一个无效的指针。

建议对这个观念模糊的人看看编程思想,在那儿能找到答案
getlow 2005-09-06
  • 打赏
  • 举报
回复
请问,什么叫做野指针啊?“野”怎么解析
xxyifan 2005-09-05
  • 打赏
  • 举报
回复
牛死了
qfeng_zhao 2005-09-05
  • 打赏
  • 举报
回复
呵呵,都说完了
zhousqy 2005-09-05
  • 打赏
  • 举报
回复
都说了,一个是常量字符串,在静态区,一个是局部数组,在栈里。
ruiding 2005-09-05
  • 打赏
  • 举报
回复
呵呵 上面两位已经说得很详细了。。
junguo 2005-09-05
  • 打赏
  • 举报
回复
第一种情况下,字符被分配到了静态存储区,是不可以修改它的值的!
第二种情况下,字符分配在了栈上,是可以修改的!
第三种情况,可以编译通过,相当于情况一!
加载更多回复(6)

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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