鱼C论坛

 找回密码
 立即注册
查看: 4815|回复: 5

刚接触指针,指针和指针变量问题

[复制链接]
发表于 2013-8-7 20:05:30 | 显示全部楼层 |阅读模式
5鱼币
今天刚看了小甲鱼大哥的c语言视频--指针第2集,有个问题很纳闷,单步调试也不知问题出在哪,问题如图,本人小白,不会汇编,求各位高手解答时详细....................
QQ截图20130807195455.png

最佳答案

查看完整内容

这算是函数问题嘛~~用函数传参的问题~~~你要改变整形变量的值,函数传的参数是整形指针对吧?? 那如果你要改变一个指针的值,那是不是应该传指针的指针~~change传参后只是一个临时新申请的变量,对他进行修改是没有用的,除非你对那个变量的地址就是用change( int** a, int** b) ,传参是用地址的地址change( &a, &b )就可以了。 希望对你有用~~加油
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-8-7 20:05:31 | 显示全部楼层
这算是函数问题嘛~~用函数传参的问题~~~你要改变整形变量的值,函数传的参数是整形指针对吧??
那如果你要改变一个指针的值,那是不是应该传指针的指针~~change传参后只是一个临时新申请的变量,对他进行修改是没有用的,除非你对那个变量的地址就是用change( int** a, int** b) ,传参是用地址的地址change( &a, &b )就可以了。
希望对你有用~~加油
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-8-7 21:23:19 | 显示全部楼层
本帖最后由 メ㊣逆ご帅☆ 于 2013-8-7 21:45 编辑

编辑下吧。。。
怎么说呢
首先*代表取值,所以在你这种情况下不能用*(你这种情况下,其他情况比如我的例子就行)
至于去掉*行不行?也不行,因为你函数传的只是个引用(也就是说你传给它的只是个备份,一个影子而已)
所以你事实上改变的只是影子的值,而不是真正的值
以下代码可以改变真正的值
不讲汇编,具体你自己看看吧。
  1. #include <stdio.h>
  2. void change(int *a,int *b);
  3. int main()
  4. {

  5.         int a=5;
  6.         int b=6;
  7.         int *Pa=&a;
  8.         int *Pb=&b;
  9.         printf("未交换前a %d b %d \n",*Pa,*Pb);
  10.         change(&Pa,&Pb);
  11.         printf("交换后a %d b %d \n",*Pa,*Pb);
  12. }
  13. void change(int *a,int *b)
  14. {
  15.    int temp;
  16.    temp=*a;
  17.    *a=*b;
  18.    *b=temp;
  19. }
复制代码
我自己思绪也有点乱了,如果有错请高手指出,必定洗耳恭听

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-8-7 21:31:08 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-8-7 22:46:31 | 显示全部楼层
对于原例中:
  1. //这里传参仅仅是p1和p2的值,这个值是指针,通过函数改变这个值指向内存处的值,从而也导致了实参指针
复制代码

你的代码中:
  1. //这里传参也是p1和p2的值(地址),你这个函数改变的是对实参两个引用的互换,而非实参本身的互换
复制代码
简单些概括:对于函数中的传参,实参向形参传递的只是实参的值,而不是实参本身。

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-8-8 13:28:54 | 显示全部楼层
主要就是说  change 里的p1 不是main里的p1
你更改change的P1 main的p1的值是不会发生改变的
诶*p1则是直接更改内存的值 所以 在change函数更改了等到main函数里在读取这个地址的值是读取到的书自然就变了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-16 06:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表