c语言函数指针参数
‘壹’ c语言中指针作为函数参数的问题。
O(∩_∩)O哈哈~。在函数声明和定义时Fun(int p1,int p2)是不是表示它的参数是两个int型的整数。Fun(int* p1,int* p2)则使表示它的参数是两个指针类型的。定义和声明时的变量只是代替符,其它的运算符号与类型符号加起来才是参数类型。你如果觉得不好理解,那么在写的时候就把int 和*放在一起(int*),这就是参数类型。
‘贰’ C语言用指针作函数参数
选D
因为第一个参数是地址传递,fun(&b,a);中传入a字符。*c=*c+1将c的值变为b字符。主函数的值改变。
第二个参数是值传递,所以在函数中d的值为B字符。但是并不影响主函数的值,所以主函数输出a的值是A。b的值是b。
‘叁’ C语言的指针作函数参数
改成下面代码看看:
#include<stdio.h>
voidabc(int*i,int*j)
{
intm;
m=*i;//指针变量的值也就是地址不能赋值给一般变量
*i=*j;//*i,*j才是指针变量指向的变量的值
*j=m;
}
voidmain()
{
inta,b;
int*pa=&a,*pb=&b;
printf("请输入a,b的值:");
scanf("%d,%d",&a,&b);
abc(pa,pb);//
printf("a=%d b=%d ",a,b);
}
‘肆’ C语言----指针参数的函数
确实很急,函数声明 中的函数名都打错了~~返回值也没打。
函数传递是值传递,传递指针的值 能改变 调用函数的值是因为 他们的地址是 一样的。而实质上也是值传递,进来的是指针指向的地址。
而你mop函数交换的是 指针 也就是 地址 值 当然不影响调用函数。
主函数中
p=m;m=n;n=p;
交换是因为这几个指针一直在作用域中,没有释放。交换了指针中存放的地址,就是指向的内存地址的改变。运行下下面二的程序 能帮你理解。
#include<stdio.h>
int main()
{
int a=604,b=750,c;
int *m,*n,*p;
m=&a;
n=&b;
printf("指针没有交换前的地址m n %d %d\n",m,n);
p=m;m=n;n=p;
printf("指针交换后的地址m n %d %d\n",m,n);
printf("%d%d\n",*m,*n);
printf("值没有交换前的地址m n %d %d\n",m,n);
c=*m;*m=*n;*n=c;
printf("值交换后的地址m n %d %d\n",m,n);
printf("%d%d\n",*m,*n);
return 0;
}
===========================
#include<stdio.h>
int main()
{
void nop(int *x,int *y);
void mop(int *x,int *y);
int a=604,b=750;
int *m,*n;
m=&a;
n=&b;
printf("主函数中指针交换前的地址\tm n %d %d\n",m,n);
mop(m,n);
printf("主函数中指针交换后的地址\tm n %d %d\n",m,n);
printf("%d%d\n",*m,*n);
nop(m,n);
printf("%d%d\n",*m,*n);
return 0;
}
void mop(int *x,int *y)
{
printf("指针没有交换前的地址\t\tm n %d %d\n",x,y);
int *z;
{z=x;x=y;y=z;}
printf("指针交换后的地址\t\tm n %d %d\n",x,y);
}
void nop(int *x,int *y)
{int a;
a=*x;*x=*y;*y=a;
}
‘伍’ C语言指针作为函数参数
#include<stdio.h>
int*fmax(int*,int*);/*函数的声明和下面的定义参数类型不一致,应该改成指针类型*/
voidmain()
{
intx,y;int*c,*d;
int*pmax;
scanf("%d%d",&x,&y);
c=&x;
d=&y;
pmax=fmax(c,d);
printf("max=%d ",*pmax);
printf("max=%d ",*pmax);
}
int*fmax(int*a,int*b)
{
int*p;
p=*a>*b?a:b;
returnp;
}
‘陆’ c语言函数指针做函数参数问题
两个比较函数的名做指针分别做参数代入排序,
这样,一个排序由小到大,后一个由大到小,如此而已。
很简单的。
是不是编译有问题?
‘柒’ c语言中函数指针作为参数与函数的嵌套
您好,针对这个问题
Status
InOrderTraverse(BiTree
T
,Status(*Visit)(TElemType
e))函数中第2个参数是一个指向函数的指针,这样做的目的是为了程序的灵活性。试想如果给你一个整型数100,要求分别按照10进行、16进制输出,你可以写一个输出10进制函数与输出16进制函数,当你有需要输出16进制时,只需要将16进制函数地址传给Visit就行,而不需要改变InOrderTraverse函数,这种做法灵活,也符合软件工程编程思想。
另外,InitStack(S);
就是函数调用,这种就在InOrderTraverse已经写死了,如果有几种初始化情况的话,就得在InOrderTraverse增加判断条件来加以区分,这样增加了代码量。
希望我的回答对您帮助!
‘捌’ C语言用指针作函数参数
选D
因为第一个参数是地址传递,fun(&b,a);中传入a字符。*c=*c+1将c的值变为b字符。主函数的值改变。
第二个参数是值传递,所以在函数中d的值为B字符。但是并不影响主函数的值,所以主函数输出a的值是A。b的值是b。
‘玖’ ★C语言 指针作函数参数
void fun(char *c,int d)
使用指针作为参数时,指针变量c指向了变量b,当c变化时,b也会变化。这里*c=*c+1,是*c由a变为b。
第二个参数d变化时,a并不会变化。
%e是一种转换说明符号,表示浮点数,并且采用e计数法。
比如2.12e2
‘拾’ c语言指针的指针做函数参数
定义sort函数时使用的参数是指针,需要注意的是这个指针是指向数组的,数组的名称其实就是一个指针,所以p可以做sort的参数