c语言指针作为函数参数
1. c语言 指针做函数参数 的优点
首先你要认识函数传参是怎么进行的
函数传参是复制形的,举个例子说:
void modify(int a)
{
a++;
}
void main()
{
int a=5;
modify(a);
printf("%d",a);
}
这个程序的答案还是5。为什么?
因为当调用modify(a)时,在执行modify函数时,是另外开辟了一个内存空间,将main中a的值复制过来,modify函数中所有的操作都是相对于这个新开辟的内存空间而言的,对原来的a没有任何改变。
现在就来说说指针,如果用指针传参的话那就完全不一样了,指针(pointer),说白了即是指向变量内存地址。同样上面的例子:
void modify(int * a)
{
(*a)++;
}
void main()
{
int a=5;
modify(&a);
printf("%d",a);
}
这个答案当然是6
因为你传进去的是a的地址,所以在modify函数中的操作都是对a地址上的内容进行操作,即是操作a所以modify函数不用返回这个数,main中a的值也会改变。因为大家都是操作同一个内存空间,而上面不用指针,modify操作的是另一个新开辟的内存空间,只是这个内存空间初始值和a一样。
现在来说说传参,其实你“为什么函数参数是字符串的多用指针?” 那句我不是很明白,C中的字符串传参好像就指针一种形式(除非用结构体)。
何时用指针,何时用拷贝。当传的参数是一个结构体,而这个结构体比较大,这时最好用指针,因为如果用拷贝的话,单单花在拷贝的时间就要浪费很多,而如果这个函数经常被调用,那么这效率问题就出现了。
你在子函数中要对你的主调用函数中变量进行操作时也可以用指针做参数,这样子函数就可以不用return 如果不是用指针的话,就要再子函数的未尾加上一条return x;把这个数返回当返回值。
多看点书,多写点程序,刚开始学都会对指针比较迷茫。写多了,自然而然就懂了。
2. C语言用指针作函数参数
选D
因为第一个参数是地址传递,fun(&b,a);中传入a字符。*c=*c+1将c的值变为b字符。主函数的值改变。
第二个参数是值传递,所以在函数中d的值为B字符。但是并不影响主函数的值,所以主函数输出a的值是A。b的值是b。
3. 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);
}
4. c语言指针的指针做函数参数
定义sort函数时使用的参数是指针,需要注意的是这个指针是指向数组的,数组的名称其实就是一个指针,所以p可以做sort的参数
5. c语言中用指针变量做函数参数有什么意义
看你的需要了,有时不用指针作为参数达不到你要的效果,比如一个swap()函数。
int
swap(int
a,int
b)
{
int
tmp;
tmp=a;
a=b;
b=tmp;
}
如果你想调用该函数交换两个变量的值,在主函数中输出,那是不可能的。比如这样调用:
int
x=1,y=2;
swap(x,y);
printf("%d
%d",x,y);
你认为会输出2
1吗?错!还是会输出1
2的。因为传入swap()函数的只是x,y的拷贝,而不是它们自身。
如果要真正达到交换的目的,就要用指针传值。这样定义函数:
void
swap(int
*a,int
*b)
{
int
tmp;
tmp=*a;
*a=*b;
*b=tmp;
}
但是给函数传值时要注意,指针是指向地址的,所以参数要是地址,即需要给变量取地址。
int
x=1,y=2;
swap(&x,&y);
printf("%d
%d",x,y);
这样就是输出2
1了!
6. C语言中指针作为函数参数的问题。
O(∩_∩)O哈哈~。在函数声明和定义时Fun(int p1,int p2)是不是表示它的参数是两个int型的整数。Fun(int* p1,int* p2)则使表示它的参数是两个指针类型的。定义和声明时的变量只是代替符,其它的运算符号与类型符号加起来才是参数类型。你如果觉得不好理解,那么在写的时候就把int 和*放在一起(int*),这就是参数类型。
7. c语言中指针作函数的参数是怎么回事有点不懂!!!
如果使用指针作为参数就是地址传递,否则只是值传递。你可以看下下面的这个函数:
void modify(int a)
{
a++;
}
void main()
{
int a=5;
modify(a);
printf("%d",a);
}
这个程序的答案还是5。为什么?
因为当调用modify(a)时,在执行modify函数时,是另外开辟了一个内存空间,将main中a的值复制过来,modify函数中所有的操作都是相对于这个新开辟的内存空间而言的,对原来的a没有任何改变。
现在就来说说指针,如果用指针传参的话那就完全不一样了,指针(pointer),说白了即是指向变量内存地址。同样上面的例子:
void modify(int * a)
{
(*a)++;
}
void main()
{
int a=5;
modify(&a);
printf("%d",a);
}
这个答案当然是6
因为你传进去的是a的地址,所以在modify函数中的操作都是对a地址上的内容进行操作,即是操作a所以modify函数不用返回这个数,main中a的值也会改变。因为大家都是操作同一个内存空间,而上面不用指针,modify操作的是另一个新开辟的内存空间,只是这个内存空间初始值和a一样。
你在子函数中要对你的主调用函数中变量进行操作时也可以用指针做参数,这样子函数就可以不用return 如果不是用指针的话,就要再子函数的未尾加上一条return x;把这个数返回当返回值。
8. 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;
}
9. C语言指针变量的赋值和做函数的参数
1、指针变量的赋值,分为定义时赋值(初始化)和单独赋值,如:
int x ;
int * px=&x ; //定义时赋值,也称初始化,注意这里的*是跟随int的,即变量px是int *类型变量! 实际上的赋值语句是px=&x ;
int * py ;
py=&x ; //单独赋值,将py指向x
*py=10 ; //这里的*,是引用指针中的数据操作符,*跟随的变量必须是指针类型变量,否则会出错! *py就是x,这里相当于x=10;
2、指针变量作为函数的参数时,子函数可以通过指针引用实参地址中的数据,达到修改实参地址中的数据。如:
#include <stdio.h>
void func( int a, int b, int *pmax )
{
if ( a>b ) *pmax=a;
else *pmax=b ;
}
void main()
{
int a=2,b=3,max=0;
func(a,b,&max ); //这里将变量max的地址传递到子函数,子函数中通过该地址,可以修改max的值,达到子函数结束后,max能带回运算结果的效果。
printf("max=%d\n", max );
}
10. c语言中用一个函数指针作为另一个函数的参数,该怎么解决
首先需要声明函数指针的类型(下例子中的typedef int (*fpFunt)(int a,int b),再定义某个函数(下例中的Add),在其参数列表中使用该函数指针类型,同时需要定义另一函数(下例中的fpAdd,注意该函数形式要和fpFunt一致,本例子中是返回一个整数,两个整型参数)作为实参用。这里在手机上使用易历知食软件内的微C程序设计来编程,举个两个数相加的例子,代码如下图: