| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1239 人关注过本帖
标题:万恶的指针...
只看楼主 加入收藏
admin_xyz
Rank: 2
等 级:论坛游民
帖 子:195
专家分:77
注 册:2012-6-24
结帖率:97.3%
收藏
已结贴  问题点数:2 回复次数:27 
万恶的指针...
程序代码:
#include <stdio.h>
#include <stdlib.h>

int main()

{
    int     i;
    int     *address = (int *) malloc(sizeof(int) * 5);

    printf ("The first address of the system to allocate space:%p\n",address);

    for (i = 0;i < 5;i++)

        {
            printf ("%p---->",address+i);
            scanf ("%d",address+i);
        }

    for (i = 0;i < 5;i++)

        {
            printf ("---->%d\n",*(address+i));    //我的问题是为什么前面加 *
        }

    return 0;
}

搜索更多相关主题的帖子: address system 
2012-08-20 16:21
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
解引用啊,取指针所指位置处的值。

授人以渔,不授人以鱼。
2012-08-20 16:24
ly2222
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:217
专家分:618
注 册:2012-6-15
收藏
得分:0 
学习了
2012-08-20 16:26
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
&取地址 *寻址

指针的主要功能就是用于加星号寻址 这个还疑惑 你还是好好看书罢。。
2012-08-20 16:30
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
指针声明的*和后面动作的解引用*,意义相反,的确是很容易让初学者迷惑的,呵呵~

授人以渔,不授人以鱼。
2012-08-20 16:43
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
以下是引用TonyDeng在2012-8-20 16:43:26的发言:

指针声明的*和后面动作的解引用*,意义相反,的确是很容易让初学者迷惑的,呵呵~

我倒觉得这是合理的

int a;
int *pa;

简单替换 a 和 *pa 对应
2012-08-20 16:45
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
问题是学的人认为int *a中的a是一个指向int的指针就觉得a是int了,不然怎么会总犯那些用指针代替数据的错误。

授人以渔,不授人以鱼。
2012-08-20 16:49
admin_xyz
Rank: 2
等 级:论坛游民
帖 子:195
专家分:77
注 册:2012-6-24
收藏
得分:0 
程序代码:
 for (i = 0;i < 5;i++)

        {
            printf ("---->%d\n",*(address+i));    //我的问题是为什么前面加 *

            //printf ("格式",地址);   应该是这样的吧,*(address+i) 这个也不是地址啊
        }

谁帮忙发个Printf函数原型。

如果      printf ("---->%d\n",*(address+i));    这样写的话是不是相当于

                  printf ("---->%d\n",100);         //假如我输入的是100

这样说对吗?

总有人比你努力,可怕的是比你牛的人比你还努力。
2012-08-20 16:59
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
熟悉指针用法的人,自然知道6楼那样的理解方式。但对初学者,他们只知道a是(指针)变量名,不知道*a也是一个变量,因为前面的知识没有说变量标识符可以使用*号,事实上在这里*是一个运算符。在声明int *a中,*a就难以解释是什么东西,在6楼那里看作是一个标识符,很好理解,不过这事实上跟标识符的规则不符,初学的人是不会那样看的,他们只看到a这个标识符,事实上也只使用a的。

int *p这样的声明格式,是大多数C程序员常用的,但其实有另外的写法,是int* p,这样把*与类型int捆绑起来,就很明显让读者觉得这是特殊的东西,自然会加以辨析,反而更好。而若int* p=&x这样的定义加初始化语句就很好理解了(写成int *p=&x这样是很怪异的)。不过指针的声明写法,历来是两种派别并存,没有绝对取舍的,C++ Primer也推荐int *p的写法,不过在我看来其实不是那么好罢了。

授人以渔,不授人以鱼。
2012-08-20 17:04
Alar30
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:10
帖 子:988
专家分:1627
注 册:2009-9-8
收藏
得分:0 
指针害死了N多人。。
2012-08-20 17:04
快速回复:万恶的指针...
数据加载中...
 
   



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

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