本篇文章给大家谈谈c语言函数指针作为参数,以及c语言函数指针参数的调用对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
1、C语言中文件指针能不能作为参数传递?2、c语言中用一个函数指针作为另一个函数的参数,该怎么解决3、C语言用指针作函数参数4、c语言中用指针变量做函数参数有什么意义?5、c语言函数指针做函数参数问题6、在c语言中,指针作为函数参数,形参只能传递值,而不能传递地址,是怎么回事?
C语言中文件指针能不能作为参数传递?
1.指针完全可以作为函数的参数进行传递,其实在C中,数组作为参数传递,跟指针作为参数传递都很类似的,指针传的是该指针指向的地址,而数组参数则是将该数组的首地址传递过去。
2.文件指针
在C语言中用一个指针变量指向一个文件,这个指针称为文件指针。通过文件指针就可对它所指的文件进行各种操作。定义说明文件指针的一般形式为:
FILE *指针变量标识符;
其中FILE应为大写,它实际上是由系统定义的一个结构,该结构中含有文件名、文件状态和文件当前位置等信息。在编写源程序时不必关心FILE结构的细节。在使用文件时,需要在内存中为其分配空间,用来存放文件的基本信息,给结构体类型是由系统定义的,C语言规定该类型为FILE型,其声明如下:
typedef struct
{
short level;
unsigned flags;
char fd;
unsigned char hold;
short bsize;
unsigned char *buffer;
unsigned ar *curp;
unsigned istemp;
short token;
}FILE;
3.例如:
FILE *fp;
表示fp是指向FILE结构的指针变量,通过fp即可找存放某个文件信息的结构变量,然后按结构变量提供的信息找到该文件,实施对文件的操作。习惯上也把fp称为文件指针。
c语言中用一个函数指针作为另一个函数的参数,该怎么解决
首先需要声明函数指针的类型(下例子中的typedef int (*fpFunt)(int a,int b),再定义某个函数(下例中的Add),在其参数列表中使用该函数指针类型,同时需要定义另一函数(下例中的fpAdd,注意该函数形式要和fpFunt一致,本例子中是返回一个整数,两个整型参数)作为实参用。这里在手机上使用易历知食软件内的微C程序设计来编程,举个两个数相加的例子,代码如下图:
调用后运行结果如下图:
C语言用指针作函数参数
选D
因为第一个参数是地址传递,fun(b,a);中传入a字符。*c=*c+1将c的值变为b字符。主函数的值改变。
第二个参数是值传递,所以在函数中d的值为B字符。但是并不影响主函数的值,所以主函数输出a的值是A。b的值是b。
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了!
c语言函数指针做函数参数问题
i f ( ( * cmp ) ( a [ i ] , a [ j ] ) ) swap ( a+i , a+i +1);
应该改为
if((*cmp)(a[i],a[i+1]))swap(a+i,a+i+1);
才对。
估记swap是交换两个地址的内容。
b u b b l e _ s o r t函数的最后一个参数是指向函数的指针,即是函数的入口地址。
如果smaller=1的话,代入i n t (*cmp ) ( int , i n t ) ),本身就不对。smaller是函数smaller(int a,int b)的入口地址,即汇编语言中CALL后后面的地址。是告诉排序函数用smaller函数来比较大小。
smaller带入b u b b l e _ s o r t,使if((*cmp)(a[i],a[i+1]))swap(a+i,a+i+1);相当于if(smaller(a[i],a[i+1]))swap(a+i,a+i+1);带入bigger就变为if(bigger(a[i],a[i+1]))swap(a+i,a+i+1);
在c语言中,指针作为函数参数,形参只能传递值,而不能传递地址,是怎么回事?
C语言中,函数参数只能传值。与传值对应的是传引用,C语言不支持函数参数传引用,C++语言才支持。
C++传引用函数:
void foo(int a) { a = 3; }
假如a = 2,执行foo(a)后,a = 3。
—
C语言可以模拟传引用,方法是通过指针来实现:
void foo2(int* ap) { *ap = 3; }
假如a = 2,执行foo2(a)后,a = 3
foo2(a)调用本质上仍然是传值,只不过传递的是指针,指针即是地址,地址本质上是一个无符号整数。
如果:
void foo3(int b) { b = 3; }
假如a = 2,执行foo3(a)后,a = 2。这是因为foo3(a)调用过程中,a值传给形参b,修改b的值与实参a无关。
注意到,foo3(a)与上述foo(a)传引用的调用是形式一样的。
既然C语言通过指针可以实现传引用调用,为什么C++还要引入引用这个特性呢?这是因为C++引入的很多新特性需借助引用来实现,比如,拷贝构造函数等等。
关于c语言函数指针作为参数和c语言函数指针参数的调用的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。