C语言中文件指针能不能作为参数传递?

C语言中文件指针能不能作为参数传递?,第1张

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称为文件指针。

#include <stdioh>

void fun(int (p1)[3],int (p2)[3]);

int main()

{

int p1[3][3]={{7,8,9},{4,5,6},{1,2,3}} ;

int p2[3][3] = {0};

int i = 0, j = 0;

fun(p1,p2);

for(i = 0;i < 3;i++){

for(j = 0;j < 3;j++){

printf("%d ",((p2+i)+j));    

}

printf("\n");

}        

return 0;

}

void fun(int (p1)[3],int (p2)[3])

{

int i = 0,j = 0;

for(i = 0;i < 3;i++){

for(j = 0;j < 3;j++){

(p2[j]+i) = (p1[i]+j);

}

}

}

扩展资料:

函数指针的声明方法为:

返回值类型 (  指针变量名) ([形参列表]);

其中,“返回值类型”说明函数的返回类型,“(指针变量名 )”中的括号不能省,括号改变了运算符的优先级。若省略整体则成为一个函数说明,说明了一个返回的数据类型是指针的函数,后面的“形参列表”表示指针变量指向的函数所带的参数列表。例如:

int func(int x); / 声明一个函数 /

int (f) (int x); / 声明一个函数指针 /

f=func; / 将func函数的首地址赋给指针f /

或者使用下面的方法将函数地址赋给函数指针:

f = &func;

赋值时函数func不带括号,也不带参数,由于func代表函数的首地址,因此经过赋值以后,指针f就指向函数func(x)的代码的首地址。

参考资料:

-函数指针

你的p是一个函数指针

(p)(a),也就是调用你所指定函数,参数为a

如你调用ral(10,1o,3,f3)

((p)(a)+(p)(b))/2;就是(f3(a)+f3(b))/2;

同理

(p)(a+ih);

f3(a+ih);

return hs; 返回给调用者

#include<stdioh>

#include<stringh>

int main()

{

void sort1(char p1);

void print(char p2);

static char name[]={"zhang","wang","li","zhao","abe"};

sort1(name);

print(name);

return 0;

}

void sort1(char p1)

{

int i,j;

char p;

for(i=0;i<4;i++)

for(j=i+1;j<5;j++)

if(strcmp(p1[i],p1[j])>=0)

{

p=p1[i];

p1[i]=p1[j];

p1[j]=p;

}

}

void print(char p2[])

{

int i;

//getchar();

for(i=0;i<5;i++)

printf("%s\n",(p2+i));

}

要将函数名作为参数,需要使用函数指针。

函数指针的定义格式为

ret_type (var_name)(arg_list);

表示返回值为ret_type,参数列表为arg_list的函数指针var_name

int (p)(int,int);

表示返回值为int,参数为两个int型的函数指针p。

以函数指针作为形参,即可实现函数名作为参数,由另一个函数调用。

void func(int (a)(int))

{

    int r = 100l;

    (a)(r);

}

即可传入函数指针,并以r为参数,调用该指针指向的函数。

#include <stdioh>

void swap1(int x,int y),swap2(int px,int py),swap3(int px,int py);

int main(void)

{

int a=1,b=2;

int pa=&a,pb=&b;

swap1(a,b);

printf("s1:a=%d,b=%d\n",a,b);

a=1,b=2;

swap2(pa,pb);

printf("s2:a=%d,b=%d\n",a,b); a=1,b=2;

swap3(pa,pb);

printf("s3:a=%d,b=%d\n",a,b); return 0;

}

void swap1(int x,int y)

{

int t; t=x; x=y; y=t;

}

void swap2(int px,int py)

{

int t; t=px; px=py; py=t;

}

void swap3(int px,int py)

{

 int pt; pt=px; px=py; py=pt;

}

扩展资料

对象与类

对象(Object)

Visual BasicNET 具有“面向对象”的特性,Visual BasicNET 应用种程序的基本单元是对象,用 Visual BasicNET 编程就是用“对象”组装程序。这种“面向对象”的编程方法与传统的全部用代码编制程序的方法有很大区别,就像用集成电路芯片组装电视机和用三极管,二极管组装电视机的区别一样。显然,“面向对象”的编程方法比传统的编程方法更简单,更方便,并且编写出的程序也更加稳定。因此,“对象”可以被看做 Visual BasicNET 程序设计的核心。

在 Visual BasicNET程序设计中,对象中还可以包含头,手,腿,脚等部位,其中的每个部位又可以单独作为作为被研究的对象。在 Visual BasicNET程序设计中,整个应用程序就是一个对象,应用程序中又包含着窗体(Form),命令按钮(Command),菜单(Menu)等对象。

类(Class)

在 Visual BasicNET中,对象是由类创建的,因此对象可以说是类的具体实例,这就好比是蛋糕和做蛋糕的模具之间的关系。

各种不同的对象分属于各种不同的种类。同一类对象可能具有一些不同的特征(或是说同一类对象不一定具有完全相同的特性);具有某些相同的特性的对象,不一定是同一类对象。

-VB

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/langs/13493967.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2025-09-01
下一篇2025-09-01

发表评论

登录后才能评论

评论列表(0条)

    保存