A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© haohaoxuexi 中级黑马   /  2014-4-3 16:51  /  1061 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 haohaoxuexi 于 2014-4-3 18:59 编辑

#include<stdio.h>
void changer(int*);//这是什么意思?
int main()
{
    int data =1;
    int* datapointer =&data;//这也不太懂
    printf("Before changer(),data=%i\n",data);
    changer(datapointer);
    printf("After changer(),data=%i\n",data);
    return 0;

}
void changer(int* pointer)
{
    *pointer=2;
}
昨天问了一道了,但还是被书上这个指针题给难着了,求大神解答

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

9 个回复

倒序浏览
沙洲冷 来自手机 中级黑马 2014-4-3 17:04:54
沙发
第一个注释是声明一个函数,该函数接收int *类型的参数,第二处是把变量data的地址赋值给指针变量datapointer。另外你的指针变量写法错误,比如:int* datapointer =&data;应写为int *datapointer = &data;int与*之间应该有一个空格。

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
指针,指针,指针,就是指向一个地方的针咯

void changer(int*);//这是什么意思?-------就是说,你这个函数的参数是指针类型

int data =1;
int* datapointer =&data;//这也不太懂------&data这个东西的意思就是把data存在内存中的地址弄出来,datapointer这个指针一看到你data原形毕露了,就一直盯着data


printf("Before changer(),data=%i\n",data);-------这里当然是很正常的输出data啦,就是1嘛
    changer(datapointer);---------你看,datapointer是指针类型对吧,那就可以传给同样需要指针类型的这个参数咯,刚好吻合啊
    printf("After changer(),data=%i\n",data);//
    return 0;

}
void changer(int* pointer)
{
    *pointer=2;----------记住了,当使用星*加在指针上面,就说明指针现在不仅是盯着看了,还要扑上去,把目标抱住,这里把2赋给他们,那么目标的值不就被改变了嘛,所以内存中data的值就改变了。再返回上面去看
}

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报

#include<stdio.h>
void changer(int*);//这是什么意思?这是函数的一个声明,给函数的变量是个指向整型的变量
int main()
{
    int data =1;
    int* datapointer =&data;//这也不太懂,创建一个指针变量datapointer,指向data
    printf("Before changer(),data=%i\n",data);
    changer(datapointer);
    printf("After changer(),data=%i\n",data);
    return 0;

}
void changer(int* pointer)
{
    *pointer=2;
}
学指针千万别钻牛角尖,

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
我复制你代码,在你代码中修改错误后给你注释解释
  1. #include<stdio.h>

  2. void changer(int *);//这里声明下面定义的changer函数

  3. int main()
  4. {
  5.     int data =1;
  6.     int *datapointer =&data;//这里定义了一个指向data的指针datapinter
  7.     printf("Before changer(),data=%i\n",data);
  8.    
  9.     changer(datapointer);//这里掉用上面的changer函数,修改data的值,这里给你配图了
  10.     printf("After changer(),data=%i\n",data);
  11.     return 0;
  12.    
  13. }

  14. //这里定义一个函数,函数中有一个int类型的指针形参,
  15. void changer(int *pointer)
  16. {
  17.     *pointer=2;

  18. }
复制代码

这是内存分析配图

最后提醒一下,以后提问,代码尽量有发表框中的代码工具发表代码

B0B3DE3E-FC44-47C2-BBFE-B1CCB5646AFB.png (73.77 KB, 下载次数: 8)

配图

配图

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
:@:shutup::o{:3_49:}
回复 使用道具 举报
{:3_53:}{:3_47:}{:3_62:}Q540530281
回复 使用道具 举报
远人 发表于 2014-4-3 17:34
我复制你代码,在你代码中修改错误后给你注释解释

这是内存分析配图

恩,以后会注意的,谢谢
回复 使用道具 举报
沙洲冷 发表于 2014-4-3 17:04
第一个注释是声明一个函数,该函数接收int *类型的参数,第二处是把变量data的地址赋值给指针变量datapoint ...

谢谢解答
回复 使用道具 举报
首先 int* datapointer 定义错误 ,应该是 int *datapointer。但是你不要晕了,这个指针变量是datapointer。
而不是*datapointer。指针变量是用来存储地址的,那&符号就是将 data这个变量的地址取出来。然后复制给datapointer用来达到简介的操作data变量。

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马