标题:本人是 C 界的新人,有问题想问
只看楼主
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:15 
以下是引用CC9527在2014-4-27 12:58:33的发言:

标准运算,赋值,取余....等等,一个变量能做的,它都能做,因为它终究是一个变量,只不过对象是存储单元地址罢了,我是这样想的

指針沒有取餘!指針確實是普通變量,它所能做的操作,有兩類,一是加減運算,此時是地址的加減,另一是解引用,即用星号提取指針所指向地址的內容。這兩種操作是不同性質的,不是你1樓最後一句那樣都是對地址操作,解引用是“取內容”。你對指針的概念其實還有一點模糊,不過要解釋清楚這個問題,也不是三言兩語可以做到的。

授人以渔,不授人以鱼。
2014-04-27 13:07
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
用你的例子:

int x = *p++,是取出指針p所指向的地址的內容即a値賦給變量x,然後把自己的値步進一級(値加一個int的長度,指向下一個int的位置)。
int y = (*p)++,相當於y = a++,此時*p已經是a的代名詞。

授人以渔,不授人以鱼。
2014-04-27 13:29
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
指針通常是int型的尺寸,但並不必定是。在16位時代,int是16位的,但那個時候指針就有32位的,有所謂遠指針、巨指針的概念。指針就是指針,不要把一般當必然,不要老說指針就是32位的或64位的,32位的機器也可以構造64位、128位的指針。

授人以渔,不授人以鱼。
2014-04-27 14:18
神机军师
Rank: 7Rank: 7Rank: 7
来 自:游鱼潜水
等 级:黑侠
威 望:2
帖 子:202
专家分:542
注 册:2013-12-21
得分:0 
回复 13 楼 TonyDeng
受教 0.0

未知令人期待!
2014-04-27 14:31
神机军师
Rank: 7Rank: 7Rank: 7
来 自:游鱼潜水
等 级:黑侠
威 望:2
帖 子:202
专家分:542
注 册:2013-12-21
得分:3 
看到上面的回复,受教了,感觉指针是32位的多啊,你可以用下面的方式显示出来:
printf("%p", (unsigned int)(void *)&a);
或者
printf("%p", (unsigned int)(void *)p);
输出的都是十六进制的数,八个符号长度,对应32位的地址。
用%d输出就是十进制整数。


在变量a中12的二进制是00001100,这个只占据了一个字节,还有另外三个字节呢?

这里,int变量开辟了多长的内存空间啊?高位会补零的
在把变量a的地址赋给了p的时候,p也在存储器中开辟了一个存储区域,也是4个字节吗?

这里,int *p; 对p开辟了内存空间,里面还没有赋值(p的地址你不知道,编译器知
道,就如int a; a的地址你不知道,编译器知道一样;你只是可以通过这个a或者p的
名字来访问他们而不用通过某地址了),编译器知道有个p变量,和它的类型,具体
的赋值还是需要再添加。
对指针变量的操作,就是对指针变量所指向的变量地址进行操作,可不可以这样理解?

这个看楼上大神的分析吧~ 对 p 的操作和对 p指向内容 的操作是不同的。对 p 的
操作是对某指针的操作,虽然p本质上也是一个数,但是 对数字的某些操作 在这里
对指针来说是没有意义的。通过 *p 访问p指向的内容,就可以用 像对a的处理方式 来处理*p 了。int *p;

未知令人期待!
2014-04-27 14:59
神机军师
Rank: 7Rank: 7Rank: 7
来 自:游鱼潜水
等 级:黑侠
威 望:2
帖 子:202
专家分:542
注 册:2013-12-21
得分:0 
int *p; int的具体意义是指p指向一个int类型的数据,p本身是地址(指针)是有固定长度的。

未知令人期待!
2014-04-27 15:01



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-430709-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.547712 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved