正在加载……
专注、离线、切勿分心

201653


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

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

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

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

int max1(int,int);

p=max1;

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

或者    typedef int (*p)();  

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

 

                       

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

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

 

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

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

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

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;

计算出的时间单位是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型,用时在强制转换



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

   a的大小100


perror()系统调用  perror(“写要输入的内容”)输出错误信息


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

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

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

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

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

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

//两个函数读到文件尾返回 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 从文件的结束处开始搜索

char fgetc( FILE *stream );        //从文件流中获取一个字符,获取失败返回EOF(-1);


 





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

l 

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

l 

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];

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

网页      UTF8      汉字3个字节




posted on 2017-04-23 20:40  正在加载……  阅读(232)  评论(0编辑  收藏  举报