函数指针|指针函数|C文件操作

201653


函数指针: 用函数指针变量调用函数

用指针变量可以指向一个函数。

函数在编译时被分配给一个入口地址。这个函数的入口地址就称为函数的指针

         int  (*p)();     //p可以指向一个函数地址;

int max1(int,int);

p=max1;

int c=(*p)(a,b)

;

或者    typedef int (*p)();  

 与其他宏定义不一样,这里表示定义中指针类型p,他所指向的是一个返回类型是int,形参是(int,int)的函数入口地址

 

5BJM4bPGKwZAAAAAElFTkSuQmCC

                       

指针函数: int* p();
int a[n];  a+1就是指针偏移一下,即指向a[1]的指针;
zpVwAAAAASUVORK5CYII=

int a[5];    int *p,*p1;   p=a;  p1=&a[3];  p1-p=3;

 

结构体在内存中存储要对齐

结构体对象拷贝  memcpy(s1,s2);

void fun(struct  student  *s1)   90%传指针

B8TPyCdcy0EDwAAAABJRU5ErkJggg==

struct student等价于stu ,struct student *等价于 pstu

pstu a[10]  (pstu=>struct student*)   char* b[10]   sizeof(a)==sizeof(b)==40


#include <time.h>

clock_t clock( void );

clock_t bg,end;

H20fAao3gsX2AAAAAElFTkSuQmCC计算出的时间单位是ms,1s=1000ms

//调用库函数qsort(快速排序)升序

int a[N];

qsort(a,N,sizeof(int),compare)   

\\compare函数要自己实现,传入的是函数地址
qsort函数传给cmopare函数两个参数*pleft,*pright,表示的是数组a里面任意两个元素(a[0],a[1])数组a可以是任意类型的,所以是void型,用时在强制转换

AUppF9oCcXE4AAAAAElFTkSuQmCC



union大小只是里面变量中所需存储空间最大的变量空间大小,多次赋值会覆盖前面的值。

Q9beBaPrQV3vQAAAABJRU5ErkJggg==   a的大小100


perror()系统调用 YBUBbzzfkBAEUB+QGoFMgPQJWcTv8HYcEXS+GGkR8AAAAASUVORK5CYII= perror(“写要输入的内容”)输出错误信息f0vuYYtAAAAABJRU5ErkJggg==


r   打开一个文本文件,读取

w  创建一个文本文件,写入(已经有的覆盖)

a   打开一个文本文件,光标定位到末尾写入

r+  打开一个文本文件,读取,写入(先读,独到末尾可以写新数据不会覆盖)

w+  创建一个文本文件,读取,写入(会覆盖)

a+  打开一个文本文件,光标定位到末尾,读取、写入

i2f8LXifqRSJ1R+4AAAAASUVORK5CYII=//两个函数读到文件尾返回 0;fwrite 写数据的时候count一般要写buffer中数据的长度strlen(str),不然会写进去一些不是自己想要的内容

int i=0; int ret=0;FILE* fp; fp=fopen(……)

int ret;

ret=fread(&i,sizeof(int),1,fp); //fp所指的文件中读一个大小为int的数放到变量i里面

char a[100]; memset(a,0,sizeof(a));

ret=fread(a,sizeof(char),sizeof(a),fp);    //fp所指的文件中读数组a大小的一些数据放到数组a

用于二进制文件

char a[100];  strcpy(a,”hello”);

ret=fwrite(a,sizeof(char),strlen(a),fp)




int fseek( FILE *stream, long offset, int origin );      //参数表1、文件指针 2、位移量,3、当前光标位置

fgetc()函数返回来自stream(流)中的下一个字符,如果到达文件尾或者发生错误时返回EOF.

(origin可设置值) 说明
SEEK_SET 从文件的开始处开始搜索
SEEK_CUR 从当前位置开始搜索
SEEK_END 从文件的结束处开始搜索

 
  


SjP69terptAAAAABJRU5ErkJggg== 





 
  

gOzRZp7M4J23QAAAABJRU5ErkJggg==

int fprintf( FILE *stream, const char *format, ... );     //返回已读入的变量的个数,未进行任何分配时返回EOF( -1 )。

0FigAAAABJRU5ErkJggg==

l  fprint(fp,”hello”);和printf工作一样,不过fprint是在文件里输入

fseek()成功时返回0,失败时返回非零你可以使用fseek()移动超过一个文件,但是不能在开始处之前使用fseek()清除关联到流的EOF标记. 

 
  
 
  
 
  
 
  

char *  fgets( char *str, int num, FILE *stream );     //

函数fgets()从给出的文件流中读取[num - 1]个字符并且把它们转储到str(字符串)中. fgets()在到达行末时停止,在这种情况下,str(字符串)将会被一个新行符结束. 如果fgets()达到[ num - 1 ]个字符或者遇到EOF, str(字符串)将会以null结束.fgets()成功时返回str(字符串),失败时返回NULL。

 //这个函数没次读之前都会自己清空str里的内容,所以不用自己认为的在循环第二次读之前使用memset

用于文本文档  int a[100], fgets(a,sizeof(a),fp)

char a[1024];

M0vLIkRwAAAABJRU5ErkJggg==

mXbI30LxlJ+peM43z+Dzre4z3Fb2ReAAAAAElFTkSuQmCC

微软编码  GB2132     汉字表示2个字节

网页      UTF8      汉字3个字节




转载于:https://www.cnblogs.com/meihao1203/p/6753890.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值