指针分配空间的疑问

dior_jadore 2011-05-12 06:22:52
本人C语言的基本功不是很扎实,下面几个情况中,是否都需要分配空间,不分配的话,是否一定会出问题?

想不太清楚,因此来请教一下高手们。

1. 定义一个指向int型的指针,定义后,可以直接用吗?可能导致什么问题?

int *aint;

*aint = 5;

2. char* program="irexec"; 这样定义的话,是否相当于分配了空间了?

3. 定义指向字符的指针,然后作为函数的参数使用,需要分配空间吗?可能导致什么问题?

char *code;
char *c;

while(lr_test(&code)==0)
{
。。。。
}
...全文
191 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
[Quote=引用楼主 dior_jadore 的回复:]
本人C语言的基本功不是很扎实,下面几个情况中,是否都需要分配空间,不分配的话,是否一定会出问题?

想不太清楚,因此来请教一下高手们。

1. 定义一个指向int型的指针,定义后,可以直接用吗?可能导致什么问题?

int *aint;

*aint = 5;
2. char* program="irexec"; 这样定义的话,是否相当于分配了空间了?

3. 定义指向字……
[/Quote]

@1:定义的指针没有适合的指向,仍是个野指针,你给他赋值,会出问题!
@2:你这么定义是正确的,在声明的时候系统会自动申请7个字节的连续内存空间
,而这个指针指向这上常量区的首地址,你不可以通过这个指针改变这个常量
区的内容,但可以改变这个指针的指向。
@3:这么定义是正确的!
如此美丽的你 2011-05-12
  • 打赏
  • 举报
回复
1.
int *aint;

*aint = 5;
aint指向一个未知的地址, 你给那个地址赋值5, 你说呢
2.
char* program="irexec";
program指向"irexec";
"irexec"放在常量区
你不能通过program指针去改变这个值, 但是program可以指向其他地方
3.
要看你lr_test里面做什么了
AnYidan 2011-05-12
  • 打赏
  • 举报
回复
指针一定要初始化(为其分配空间或指向 NULL),唯一的例外是用字符串常量初始化一个指针,字符串常量位于常量区,你不可以修改它
就想叫yoko 2011-05-12
  • 打赏
  • 举报
回复
1.
int *aint;

*aint = 5;
aint指向一个未知的地址, 你给那个地址赋值5, 你说呢
2.
char* program="irexec";
program指向"irexec";
"irexec"放在常量区
你不能通过program指针去改变这个值, 但是program可以指向其他地方
3.
要看你lr_test里面做什么了
crjwlaq 2011-05-12
  • 打赏
  • 举报
回复
1. 指针是指向一个地址 按你那么写,会出现未初始化的问题

2. 第二个不会出问题 “irexec ”是常量区域 要分配内存 要系统分配的。


3. 第三个 不用分配空间 指针地址就行。
淡蓝 2011-05-12
  • 打赏
  • 举报
回复
1、悬空指针,可能出现内存写异常
2、是的,分配的是常量区的空间
3、可以这样子

指针跟其他的变量没什么区别,只不过它装的值代表的是一个地址
proghua 2011-05-12
  • 打赏
  • 举报
回复
1. int *aint;
*aint = 5;
不一定,你这个例子肯定会出问题,linux下是段错误
2. "irexec",字符串常量,在数据段分配,大部分编译器放在只读数据段,gcc下是.rodata段
3. 需要,脏值,不可预料的后果,大部分情况下,程序会崩溃

69,380

社区成员

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

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