关于C语言在子函数内互换两数值的问题
请教:我想实现的功能是在子函数内互换两数值,在子函数内通过指针来实现的:
#include <stdio.h>
void voluetion(int * px,int * py)
{
int *z ;
*z = *px;
*px = *py;
*py = z;
}
void main(void)
{
int x = 10;
int y = 20;
printf("调用函数之前x的值:%d\n",x);
printf("调用函数之前y的值:%d\n",y);
voluetion(&x,&y);
printf("调用函数之前x的值:%d\n",x);
printf("调用函数之前y的值:%d\n",y);
}
上述代码编译的时候没有错,但是运行的时候会停止工作,是*z的问题,调试显示 cxx 0030:错误:表达式不能计算cxx 0030:错误:表达式不能计算
#include <stdio.h>
void voluetion(int * px,int * py)
{
int z ;
z = *px;
*px = *py;
*py = z;
}
void main(void)
{
int x = 10;
int y = 20;
printf("调用函数之前x的值:%d\n",x);
printf("调用函数之前y的值:%d\n",y);
voluetion(&x,&y);
printf("调用函数之前x的值:%d\n",x);
printf("调用函数之前y的值:%d\n",y);
}
将指针类型的变量z换成整数类型的变量z,就会顺利运行
问:这是为什么啊?第一个程序指针类型的变量z,在给z地址内赋值的时候使用*z不是也是可以将*px的值赋到z地址内吗,效果应该是将*p的值赋给整型变量z是一样的啊 本帖最后由 风过无痕丶 于 2018-6-9 11:00 编辑
int *p
*p // 他是一个int里面的值
p// 他是一个int的地址
所以,综上所述,指针不能成为一个数据的容器,或者说是载体。但是他能带你去找到这个载体。 #include <stdio.h>
void voluetion(int * px,int * py)
{
int *z ;
*z = *px;
*px = *py;
*py = z;你这里漏了个*号..... #include <stdio.h>
void voluetion(int * px,int * py)
{
int *z ;
z = px;
px = py;
py = z;
}这样试一下 wjp 发表于 2018-6-10 07:27
#include
void voluetion(int * px,int * py)
{
哦哦 抱歉 贴代码的时候没仔细检查,加上*号在运行程序的时候也会停止工作 一颗yan 发表于 2018-6-11 10:01
#include
void voluetion(int * px,int * py)
{
您好 您这样写是不是只把px和py中的地址互换了?而地址指向的内容还是原来的,我这边运行的时候没有实现两数互换。但是我感觉您的想法非常好,我想一想能不能借助您的思路的基础上,实现互换两个数值谢谢{:5_109:} 回答你的问题:
int *z ;的写法是没有初始化的,z的值是随机的,此时是野指针;
正确的写法应该是:int *z = NULL;
所以: int *z ;
*z = *px;
会报错,是因为你往一个不属于你的地址里面把*px的值赋值过去,是会造成程序崩溃的。
戚晓栖 发表于 2018-6-12 11:59
回答你的问题:
int *z ;的写法是没有初始化的,z的值是随机的,此时是野指针;
正确的写法应该是:int * ...
您好 首先谢谢您,又学习啦! 但是按照您说的,我将程序修改了一下,还是会造成程序崩溃
void voluetion(int * px,int * py)
{
int *z = NULL;
*z = *px;
*px = *py;
*py = *z;
} 平淡最真 发表于 2018-6-12 12:18
您好 首先谢谢您,又学习啦! 但是按照您说的,我将程序修改了一下,还是会造成程序崩溃
当然会崩溃了;
因为 int *z = NULL;这样只是初始化了指针,但是指针还没有空间。
int *z = malloc(int);这样就可以给*z赋值了; 戚晓栖 发表于 2018-6-12 12:42
当然会崩溃了;
因为 int *z = NULL;这样只是初始化了指针,但是指针还没有空间。
int *z = malloc(int ...
写错了:
int *z = (int*)malloc(sizeof(int));这样 戚晓栖 发表于 2018-6-12 12:43
写错了:
int *z = (int*)malloc(sizeof(int));这样
非常感谢,成功打印,我基础还是不牢靠啊,还得努力啊{:5_109:} 平淡最真 发表于 2018-6-12 12:48
非常感谢,成功打印,我基础还是不牢靠啊,还得努力啊
加油{:5_110:}
页:
[1]