主题:运行报错误..指针问题
zaan
[专家分:10] 发布于 2009-03-06 02:36:00
#include<stdio.h>
void print(int *b)
{
printf(" %d",*b);
}
void main()
{
int *a;
*a=5;
print(a);
}
如此简单的一个程序,机器竟然在运行时候抱错误..
难道是指针有错误么..
回复列表 (共3个回复)
沙发
小小C [专家分:4570] 发布于 2009-03-06 10:11:00
void main()
{
int *a; // 这是一个指针,它指向哪里?
*a=5; // 不确定指向哪的指针,肯定错啦!
print(a);
}
可以改为
void main()
{
int i;
int *a = &i;
*a = 5;
print(a);
}
板凳
星绽紫辉 [专家分:1700] 发布于 2009-03-06 10:11:00
当然有错误,对于指针,你必须要认识到这点,它所指向的数据必须是已经分配内存的。如何判断呢?比如 int a,像这样的自动变量是在栈上分配的,你可以用一个指针指向它。或者是int *p = new int;这样的数据是分配在堆上的,也是可以用其他指针指向的。你这个指针指向的是一个不确定的位置,你对他赋值为5肯定就报错了。还有一种指针如:char* p = "abc";这种指针指向的是常量区,也是有效的指针,但是这种指针指向的内存页面是可读不可写的,所以称它为常量区。对于指针,有必要去了解一些4GB进程空间的知识,有利于你理解指针。
3 楼
xiaohei2 [专家分:70] 发布于 2009-03-07 15:18:00
这种做法当然是不对的!
看上去好像你把a赋值了,其实不然!
应为他只想的位置不确定呀!且你直接将5
赋予a,但此时5没有内存空间呀!
澄海可以这样写:
[code=c]
请填写代码#include<stdio.h>
void print(int *b)
{
printf(" %d",*b);
}
void main()
{
int *a;
*a=5;
print(a);
}
[/code]
我来回复