关于指针基本问题

1.定义指针int*p时候就在内存空间分配了地址,而空间大小是NULL??2.if(p=NULL)表示判断其空间是否有大小?又有int*q,且*q有大小则3.p=q表示将... 1.定义指针 int *p 时候就在内存空间分配了地址,而空间大小是NULL??
2.if(p=NULL)表示判断其空间是否有大小?
又有int *q, 且*q有大小
则3.p=q 表示将指针p的地址等于指针q的地址?
4.这时我们说*p指针和*q在内存的基地址和偏移量都是一个东西?

注意是4问啊,杜绝ctrlc ctrlv。
展开
 我来答
reallygone
2011-01-06 · 超过31用户采纳过TA的回答
知道答主
回答量:75
采纳率:0%
帮助的人:53万
展开全部
1。分配一个变量,内存空间就会划给这个变量一个空间,空间的地址就像房间的编号,你可以按照编号找到地址,但分给你的空间大小不是p=NULL后面那个NULL,是sizeof(p)!,换句话说不是你的空间大小是NULL,而是你的空间放的东西是"NULL",而你的空间大小,那是sizeof的问题。

2。首先你这个写法不对,判断相等应该是双等号==,不是=,也就是说是p==NULL,不是p=NULL,p=NULL是赋值不是判断,是把NULL这个值赋给p,而不是判断p是否是NULL。而p==NULL,这不是判断这个空间是否有大小,而是判断p这个房间里存放的东西是不是NULL,也就是说p的值是不是NULL——在第一条的答案里已经说过,空间大小是一回事,空间里放的东西是一回事。

3。从上面所说你应该已经看出来“*q有大小”这个说法是错误的了,不是"*q"有大小而是这个地方有具体数值。可以推测,你说的有大小就是*q被付了值。但是还有一个问题我不得不问你,你看到的赋值语句是“q=”,还是"*q="?要知道,差了一个星号意思差的太远了!q=的意思是q这个地址被指定了,相当于q这个房间里放置了指定房间的钥匙。而*q=的意思是这个钥匙指向的房间里放了什么东西!你拿到钥匙和房间被放了什么东西可不是一个意思。
所以我要继续问下面的问题:你确定看到的是p=q,不是*p=*q也不是*p=q也不是p=*q,如果你说确实是p = q,那就好办了,那就是说你的房间钥匙q,被复制了一把,也就是p。这两个钥匙可以开同一个房间。但是,你的说法错误,是p的值等于q的值,地址就是他们的值。而不是p的地址等于q的地址,还是那句话,地址相当于钥匙,房子里的东西才叫做值,这里p,q都是指针,他们的值是他们房间里的东西,这个东西,因为他们是地址,所以也是钥匙,指向另一个房间。他们的地址,是他们本身的钥匙。

4。当p=q了,那么*p和*q自然是一个值,p和q相当于一个房间的两把钥匙,自然*q(相当于q房间的东西)和*p(p房间里的东西,这不一样吗,p和q开的房间是一个阿)也是一样的。

总之:类型 *指针名称(例如int *p),这种声明,是声明了一个指向“类型”地址的指针,这个指针本身有自己的地址,也就是说它有自己的房间,只是,他的房间里的东西,是指向声明类型的某房间的路标和钥匙。
百度网友78bd6eae2
2011-01-06 · TA获得超过658个赞
知道小有建树答主
回答量:464
采纳率:0%
帮助的人:592万
展开全部
首先纠正你叙述上的错误:说某某有“大小”不准确。如你说的“空间大小”应该理解成“占内存空间大小”即该指针所需内存字节数;而指针p的值或许为NULL。
1.给指针p在内存空间分配了地址不假,其空间的大小为一个字(WORD)的大小(32位系统为4个字节,16位系统为2个字节)。但它的内容(值)是随机的,很多时候不为NULL。
2.if(p=NULL),是将NULL的值存入p的同时,判断是否成立。这里“=”是赋值,不是判断(“==”)。这种写法等价于:if((p=NULL)==1)...
“又有int *q, 且*q有大小”,是不是想说*q已经有了值?或许象这样:int a=5,*q=&a; 这时*q的值为5,如果是这个意思吧,则:
3.p=q是表示让p也指向q所指向的地点,如上段的“或许”中:p、q均指向a。
4.仍如“或许”中,*p与*q的值均为a的值(5)
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
小八79
2011-01-06 · TA获得超过504个赞
知道小有建树答主
回答量:360
采纳率:0%
帮助的人:259万
展开全部
1 错 LZ貌似还没弄清一般变量跟指针变量的区别 p=NULL 是指指针P所指向的内存空间为NULL 定义一个int *p 只是为*p 这个变量申请了一个内存空间 其类型是unsing int 类型 大小为4
2 错
3 错
4 错
个人观点
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友d57e73d
2011-01-06 · TA获得超过989个赞
知道小有建树答主
回答量:1043
采纳率:0%
帮助的人:850万
展开全部
回答这些问题之前,我想知道楼主有没有弄清楚指针的含义.

声明一个指针变量,不管前面是int 还是什么,占用的内存都是4字节.因为它里面只是存的一个(指向变量的)地址..不管你指向什么东西,这个地址的大小都是不变的.就好比,不管你怎么换手机号,你的手机号长度都是11位. 就是说,1的说法是错的.

NULL一般情况下等同于0. 指针变量里存放的地址是0的话,就没指向任何东西,那种指针叫空指针.所以2的说法也是错的.

指针自己本身也有地址,所以才有那种指向指针的指针变量.就好像楼主有两部手机,呼叫两部手机都能找到楼主,但是两部手机本身又不是一个东西. 所以3,4也是错的.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友e415e6e
2011-01-06 · TA获得超过136个赞
知道小有建树答主
回答量:141
采纳率:100%
帮助的人:148万
展开全部
1. 已经分配了内存,但是一个随机数,而不是NULL,不能混淆,该定义分配的内存空间大小是sizeof(int *).
NULL指针:标准定义了NULL指针,它作为一个特殊的指针变量,表示不指向任何东西。要使一个指针变量为NULL,可以给它赋一个零值。为了测试一个指针变量是否为NULL,你可以将它与零值进行比较。
2. 这里应该是 if(p == NULL),判断p是否是一个空指针,并不是判断其空间大小,空间大小是固定的.
3. 这里应该说指针q有指向的对象,即*q有值.p=q是将q中的值拷贝到p中,即p也指向q所指向的对象,而不是p的地址等于指针q的地址.
4. *p和*q的值是一样的,因为p指针和q指针指向同一个对象.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式