c语言求解 指针变量作为函数参数为什么用void 定义而且不用返回值就能改变主函数中的数据 而

作者&投稿:脂店 (若有异议请与网页底部的电邮联系)
C语言中指针变量作函数参数,为什么要在main函数里加上void swap(int *p1,int *p2);~

函数声明是很重要的!
你的swap写在main前面就不用声明啦。

“形参不影响实参”这句要注意理解,当参数是数组、指针时特别注意。

本例子中函数void jsValue(int m,int k,int xx[])的三个参数是m、k、xx,函数里面无论对这三个数如何改变,函数返回后三个数还是调用前的值,这句话对于m和k很好理解,对于xx而言,其值是指向的某块内存,注重点是指向,这个指向是不会改变的,但是指向的内容被改变了。

这个很容易理解,指针变量保存的是地址信息,*p这个是取p指针保存的地址里面的值,更改的也是保持的地址里面的值。
而函数中传递的是变量的拷贝,比如指针传递的就是他保存的地址
如果在函数中对他保存的地址改掉,那么是不影响主函数中的变量的

错误的原因是scanf中是用英文的逗号,而你输入的是中文的逗号,切换输入法就可以了。



1:为什么用void*定义 指针有很多类型啊,你想用什么就用什么当参数呗,只不过用void*可以接收任何类型的指针而已 ,当然接收完之后要用的话还是要转换回去
2:为什么能修改数据 首先呢 形参还是实参的拷贝,这点没变,但是当你对形参指针进行读写时,便修改了实参的内存了,因为他俩本来就指的同块内存
当然用void*指针做参数也有坏处 就是无法自动判别实参类型,我就是在找解决方案的时候看见你这个了~~


遵义市13291567120: 用C语言编写程序,要求:指针作为函数参数 -
车闸人参: #include"stdio.h" #include"malloc.h"void move(int *array,int n,int m) {int *p,array_end;array_end=*(array+n-1); for(p=array+n-1;p>array;p--)*p=*(p-1); *array=array_end; if(m>0)move(array,n,m-1); }void main() {int *Arr,n,m,i; printf(...

遵义市13291567120: C语言指针做函数形参的问题 -
车闸人参: 函数是值传递(单向传递,指针也是,即地址传递也是单向传递)changeSeason(ps);将ps的地址传递给p p++,p--是形参p的变化,与ps无关, p是函数另外新建的指针变量(调用函数创建,函数结束释放) 类比int m,n=1;m=n; m++;不会影响n的变化一样.但(*p)++就有影响了.因为p与ps指向地址相同,即"Spring"中'S'的地址 *p与*ps就是字符'S',(*p)++等价于'S'++(当然本题中是错误的,'S'常量不能++),传递地址的作用就体现在*p的用法上(可以改变传入地址指向的变量的值,相当于间接改变变量).

遵义市13291567120: C语言指针作为函数参数问题 -
车闸人参: 按你的意思,程序改成如下:(后面说明为什么不行) void getptr(int *p,int num) { p=(int *)maccol(num*sizeof(int)); return; } void main() { int *ptr; int k; getptr(ptr,10); for(k=0;k<10;k++) { scanf("%d",&ptr[k]); } } 首先要说明的是int *ptr,这时候ptr...

遵义市13291567120: C语言指针变量的赋值和做函数的参数 -
车闸人参: 1、指针变量的赋值,分为定义时赋值(初始化)和单独赋值,如:int x ; int * px=&x ; //定义时赋值,也称初始化,注意这里的*是跟随int的,即变量px是int *类型变量! 实际上的赋值语句是px=&x ; int * py ; py=&x ; //单独赋值,将py指向x*py=...

遵义市13291567120: C语言关于指针变量作为函数的参数的问题 -
车闸人参: 类型标识符 函数名(类型说明符 *指针变量名 类型说明符 *指针变量名2,....) 望采纳!!!

遵义市13291567120: c语言编程:用指针变量作函数参数求三个数和
车闸人参: #include "stdafx.h" #include "process.h" double getsum(double *a, double *b, double *c);//声明函数 参数为double类型的指针 int main(int argc,char* argv[]) { double *sum=new double; *sum = 0; double x = 1.33332; double y = 2.1; double z = ...

遵义市13291567120: C语言中如何将指针作为参数带入函数,没然在函数中转为数组,一一对应,谢谢啊 -
车闸人参: float* twoorderS(float *xt) //将*写在靠近返回值类型名后,*对返回值的限定不是函数,函数是没有类型的 { int i; float b[number-2]; float one[number-1]; for(i=0;i { one[i]=xt[i]; //以下标形式访问指针,简化代码if(i > 1) b[i-1]=one[i]-one[i-1]; //滞后一...

遵义市13291567120: c语言指针的指针做函数参数 -
车闸人参: 你的sort函数定义的时候接受的参数实际上就是指针的指针,char *string[] 也可以写成char **string;

遵义市13291567120: c语言中指针作函数的参数是怎么回事???有点不懂!!! -
车闸人参: 如果使用指针作为参数就是地址传递,否则只是值传递.你可以看下下面的这个函数: void modify(int a) { a++; }void main() { int a=5; modify(a); printf("%d",a); } 这个程序的答案还是5.为什么? 因为当调用modify(a)时,在执行...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网