黑马程序员技术交流社区

标题: 关于C语言指针的问题 [打印本页]

作者: haohaoxuexi    时间: 2014-4-3 16:51
标题: 关于C语言指针的问题
本帖最后由 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;
}
昨天问了一道了,但还是被书上这个指针题给难着了,求大神解答


作者: 沙洲冷    时间: 2014-4-3 17:04
第一个注释是声明一个函数,该函数接收int *类型的参数,第二处是把变量data的地址赋值给指针变量datapointer。另外你的指针变量写法错误,比如:int* datapointer =&data;应写为int *datapointer = &data;int与*之间应该有一个空格。
作者: 程浩    时间: 2014-4-3 17:12
指针,指针,指针,就是指向一个地方的针咯

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的值就改变了。再返回上面去看
}


作者: agelessman    时间: 2014-4-3 17:34

#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;
}
学指针千万别钻牛角尖,
作者: 远人    时间: 2014-4-3 17:34
我复制你代码,在你代码中修改错误后给你注释解释
  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)

配图

配图

作者:     时间: 2014-4-3 17:47
:@:shutup::o{:3_49:}
作者:     时间: 2014-4-3 17:49
{:3_53:}{:3_47:}{:3_62:}Q540530281
作者: haohaoxuexi    时间: 2014-4-3 18:56
远人 发表于 2014-4-3 17:34
我复制你代码,在你代码中修改错误后给你注释解释

这是内存分析配图

恩,以后会注意的,谢谢
作者: haohaoxuexi    时间: 2014-4-3 18:58
沙洲冷 发表于 2014-4-3 17:04
第一个注释是声明一个函数,该函数接收int *类型的参数,第二处是把变量data的地址赋值给指针变量datapoint ...

谢谢解答
作者: 王雪冬    时间: 2014-4-3 20:40
首先 int* datapointer 定义错误 ,应该是 int *datapointer。但是你不要晕了,这个指针变量是datapointer。
而不是*datapointer。指针变量是用来存储地址的,那&符号就是将 data这个变量的地址取出来。然后复制给datapointer用来达到简介的操作data变量。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2