
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
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)