鱼C论坛

 找回密码
 立即注册
查看: 2446|回复: 11

[已解决]关于C语言在子函数内互换两数值的问题

[复制链接]
发表于 2018-6-9 08:17:08 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
请教:
我想实现的功能是在子函数内互换两数值,在子函数内通过指针来实现的:
  1. #include <stdio.h>
  2. void voluetion(int * px,int * py)
  3. {
  4.         int *z ;
  5.         *z = *px;
  6.         *px = *py;
  7.         *py = z;
  8. }

  9. void main(void)
  10. {
  11.         int x = 10;
  12.         int y = 20;
  13.         printf("调用函数之前x的值:%d\n",x);
  14.         printf("调用函数之前y的值:%d\n",y);
  15.         voluetion(&x,&y);
  16.         printf("调用函数之前x的值:%d\n",x);
  17.         printf("调用函数之前y的值:%d\n",y);
  18. }
复制代码

上述代码编译的时候没有错,但是运行的时候会停止工作,是*z的问题,调试显示   cxx 0030:错误:表达式不能计算cxx 0030:错误:表达式不能计算

  1. #include <stdio.h>
  2. void voluetion(int * px,int * py)
  3. {
  4.         int z ;
  5.         z = *px;
  6.         *px = *py;
  7.         *py = z;
  8. }

  9. void main(void)
  10. {
  11.         int x = 10;
  12.         int y = 20;
  13.         printf("调用函数之前x的值:%d\n",x);
  14.         printf("调用函数之前y的值:%d\n",y);
  15.         voluetion(&x,&y);
  16.         printf("调用函数之前x的值:%d\n",x);
  17.         printf("调用函数之前y的值:%d\n",y);
  18. }
复制代码

将指针类型的变量z换成整数类型的变量z,就会顺利运行
问:这是为什么啊?第一个程序指针类型的变量z,在给z地址内赋值的时候使用*z不是也是可以将*px的值赋到z地址内吗,效果应该是将*p的值赋给整型变量z是一样的啊
最佳答案
2018-6-12 12:43:36
戚晓栖 发表于 2018-6-12 12:42
当然会崩溃了;
因为 int *z = NULL;这样只是初始化了指针,但是指针还没有空间。
int *z = malloc(int ...

写错了:
int *z = (int*)malloc(sizeof(int));这样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-6-9 10:55:29 | 显示全部楼层
本帖最后由 风过无痕丶 于 2018-6-9 11:00 编辑
  1. int *p
  2. *p // 他是一个int里面的值
  3. p  // 他是一个int的地址
复制代码


所以,综上所述,指针不能成为一个数据的容器,或者说是载体。但是他能带你去找到这个载体。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-6-10 07:27:03 From FishC Mobile | 显示全部楼层
#include <stdio.h>
void voluetion(int * px,int * py)
{
        int *z ;
        *z = *px;
        *px = *py;
        *py = z;你这里漏了个*号.....
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-6-11 10:01:24 | 显示全部楼层
#include <stdio.h>
void voluetion(int * px,int * py)
{
        int *z ;
        z = px;
        px = py;
        py = z;
}这样试一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-6-12 07:09:36 | 显示全部楼层
wjp 发表于 2018-6-10 07:27
#include
void voluetion(int * px,int * py)
{

哦哦 抱歉 贴代码的时候没仔细检查,加上*号在运行程序的时候也会停止工作
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-6-12 07:18:22 | 显示全部楼层
一颗yan 发表于 2018-6-11 10:01
#include
void voluetion(int * px,int * py)
{

您好 您这样写是不是只把px和py中的地址互换了?而地址指向的内容还是原来的,我这边运行的时候没有实现两数互换。  但是我感觉您的想法非常好,我想一想能不能借助您的思路的基础上,实现互换两个数值  谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-6-12 11:59:18 | 显示全部楼层
回答你的问题:
int *z ;的写法是没有初始化的,z的值是随机的,此时是野指针;
正确的写法应该是:int *z = NULL;

所以: int *z ;
        *z = *px;
会报错,是因为你往一个不属于你的地址里面把*px的值赋值过去,是会造成程序崩溃的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-6-12 12:18:26 | 显示全部楼层
戚晓栖 发表于 2018-6-12 11:59
回答你的问题:
int *z ;的写法是没有初始化的,z的值是随机的,此时是野指针;
正确的写法应该是:int * ...

您好 首先谢谢您,又学习啦! 但是按照您说的,我将程序修改了一下,还是会造成程序崩溃
  1. void voluetion(int * px,int * py)
  2. {
  3.         int *z = NULL;
  4.         *z = *px;
  5.         *px = *py;
  6.         *py = *z;
  7. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-6-12 12:42:22 | 显示全部楼层
平淡最真 发表于 2018-6-12 12:18
您好 首先谢谢您,又学习啦! 但是按照您说的,我将程序修改了一下,还是会造成程序崩溃

当然会崩溃了;
因为 int *z = NULL;这样只是初始化了指针,但是指针还没有空间。
int *z = malloc(int);这样就可以给*z赋值了;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-6-12 12:43:36 | 显示全部楼层    本楼为最佳答案   
戚晓栖 发表于 2018-6-12 12:42
当然会崩溃了;
因为 int *z = NULL;这样只是初始化了指针,但是指针还没有空间。
int *z = malloc(int ...

写错了:
int *z = (int*)malloc(sizeof(int));这样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-6-12 12:48:41 | 显示全部楼层
戚晓栖 发表于 2018-6-12 12:43
写错了:
int *z = (int*)malloc(sizeof(int));这样

非常感谢,成功打印,我基础还是不牢靠啊,还得努力啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-6-12 12:54:24 | 显示全部楼层
平淡最真 发表于 2018-6-12 12:48
非常感谢,成功打印,我基础还是不牢靠啊,还得努力啊

加油
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-26 11:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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