以下程序从理论上是正确的还是错误的? 在TC++ 3.0 环境没有任何编译和连接的警告或错误,运行结果正确。
我想问的核心问题是:程序没有明确地为指针p分配地址,这时会自动分配合理地址吗?会不会胡乱分配?可能我们多数时不这样使用指针,但是我必须把它搞明白。请指教。
#include "stdio.h"
void main() { int *p; *p=77; printf("%d\n",*p); }
以下程序从理论上是正确的还是错误的? 在TC++ 3.0 环境没有任何编译和连接的警告或错误,运行结果正确。
我想问的核心问题是:程序没有明确地为指针p分配地址,这时会自动分配合理地址吗?会不会胡乱分配?可能我们多数时不这样使用指针,但是我必须把它搞明白。请指教。
#include "stdio.h"
void main() { int *p; *p=77; printf("%d\n",*p); }
以下程序从理论上是正确的还是错误的? 在TC++ 3.0 环境没有任何编译和连接的警告或错误,运行结果正确。
我想问的核心问题是:程序没有明确地为指针p分配地址,这时会自动分配合理地址吗?会不会胡乱分配?可能我们多数时不这样使用指针,但是我必须把它搞明白。请指教。
#include "stdio.h"
void main() { int *p; *p=77; printf("%d\n",*p); }
以上程序到是能运行,但*P是指针变量,上面*p=77也是合理。原因就是如果你是*p=77而不是p=77就会能运行,指针加*可以当变量来使用可以附值。不加*就是指针附值只能对它的地址进行操作,不会对它的数值进行操作。
非常感谢 ysm123 先生 / 小姐。
我总结您的指点:
1 【指针加*可以当变量来使用】既然当变量用,当然系统会分配合理的内存地址,而不会乱用内存空间。
2 上面程序虽合理,不会有问题,但按程序规范性来说,很不规范,一般不要这样用。
对不起,写错你的名字了。应该是 yms123 ,我写成 ysm123 了。
感谢您的解答。
以下程序从理论上是正确的还是错误的? 在TC++ 3.0 环境没有任何编译和连接的警告或错误,运行结果正确。
我想问的核心问题是:程序没有明确地为指针p分配地址,这时会自动分配合理地址吗?会不会胡乱分配?可能我们多数时不这样使用指针,但是我必须把它搞明白。请指教。
#include "stdio.h"
void main() { int *p; *p=77; printf("%d\n",*p); }
严重错误!
好好看看书!
我想上面的程序,是不会有问题的,因为在申请 int *p时已经给了地址了,这个地址肯定没有问题的是不是???
就象yms123 所说把它当变量用不会有问题吧???
但如果用*(p+n)=X;就有问题了,因为你不知道它里面原来存的什么数据,是不是
knocker???我现在又迷糊了!!!
[此贴子已经被作者于2004-08-06 10:47:28编辑过]
很明显是错误的,看看书你就会发现,指针时不可以直接赋值的,至少也要加上个&符吧!~!~!~!
我想上面的程序,是不会有问题的,因为在申请 int *p时已经给了地址了,这个地址肯定没有问题的是不是???
就象yms123 所说把它当变量用不会有问题吧???
但如果用*(p+n)=X;就有问题了,因为你不知道它里面原来存的什么数据,是不是
knocker???我现在又迷糊了!!!
#include "stdio.h"
void main() { int *p;//编译程序是会给p变量分配一个空间(一个地址),这个空间的指定你是干涉不了的,是编译程序的事。但是,p变量未经初始化其内容(即分配给p的地址中的数据)是随机的
*p=77;//那么,这句是什么意思?是以p变量的内容(即分配给p的地址中的数据)为地址的空间进行赋值,你想想这会造成什么后果? printf("%d\n",*p); }
那初始化不也是对该地址进行写数据么???
你的意思是这个地址不能动????
那还怎么初始化????
我认为所谓的初始化(用数组,或动态申请)那只是对*(p+n)起作用的,他是先用数组把该部分的地址先占住,不被别的
变量占用,这样对*(p+n)写或读都不会引起别的副作用!!!