当前位置: 移动技术网 > IT编程>开发语言>C/C++ > C语言之_双重指针、多文件、include、文件

C语言之_双重指针、多文件、include、文件

2018年02月21日  | 移动技术网IT编程  | 我要评论

拈花郎,台湾萝莉双胞胎姐妹花,舞帝传媒

1、双重指针

#include
#include
#include


void modify_p(int *p)
{
*p=*p+1;
}
int main()
{
int a=100;
int *p=&a;
modify_p(p);
printf("%p\n",p);
return 0;
}
////
//a值被改变了,而p值没有被改变


void modify_p(int *p)
{
*p=*p+1;
}
int main()
{
int a=100;
int *p=&a;
modify_p(p);
printf("%p\n",p);
return 0;
}
//需求:就是要改p ------必须要用 双重指针
void modify_p(int **p)
{
*p=*p+1;
}
int main()
{
int a=100;
int *p=&a;
modify_p(&p);
printf("%p\n",p);
return 0;
}


知识点:----函数可以用它的 返回值 来替换
int sum_bmd(int a,int b)
{
int result=a+b;
return result;
}


int main()
{
int a=10;
int b=20;
30;



return 0;
}

多文件
//main.cpp
#include
float sum(float a,float b);
int main()
{
float a=10.1f;
float b=20.1f;
float result=sum(a,b);
printf("sum is %f\n",result);


return 0;
}
//math_bmd.h------接口
float sum(float a,float b);
//math_bmd.cpp
float sum(float a,float b)
{


return a+b;
}


说明:
实际项目中有这种情况:
math_bmd.h和math_bmd.cpp是别的程序员写。他有可能以后会只提供 .h文件,而.cpp文件用1个二进制库文件来代替。
我们如够要用它的若干函数,就只能看.h 文件了-------.h文件中的函数,可以知识库中的1部分,公开的函数原型-----接口函数
文件
将3个学生信息----输出到 显示器文件
代码:
#include
#include
#include


struct Student
{
int number;
char *name;
};


int main()
{
struct Student stu[3]={1001,"zhangsan",1002,"lisi",1003,"wangwu"};
for(int i=0;i<3;i++)
{
printf("number is %d name is %s ",stu[i].number,stu[i].name);
}


return 0;
}




//改为输出到 磁盘文件a.txt
#include
#include
#include


struct Student
{
int number;
char *name;
};


int main()
{
FILE *fp;
fp=fopen("a.txt","w");

struct Student stu[3]={1001,"zhangsan",1002,"lisi",1003,"wangwu"};
for(int i=0;i<3;i++)
{
fprintf(fp,"%d %s ",stu[i].number,stu[i].name);
}


return 0;
}

//从键盘文件读入3个学生信息
//从磁盘文件a.txt读入3个学生信息
#include
#include
#include

struct Student
{
int number;
char *name;
};


int main()
{
struct Student stu[3];
char buffer[20]={'\0'};
FILE *fp=fopen("a.txt","r");

for(int i=0;i<3;i++)
{
fscanf(fp,"%d %s ",&stu[i].number,buffer); //fp为磁盘文件。如果改为stdin,就成了从键盘文件读入了
stu[i].name=(char *)malloc(strlen(buffer)+1);
strcpy(stu[i].name,buffer);


}


for(int j=0;j<3;j++)
{
printf("%d %s ",stu[j].number,stu[j].name);
}


return 0;
}




打开文件失败的判断和处理方法:
FILE *fp=fopen("a.txt","r");
if(fp==NULL)
{
printf("文件打开失败--无此文件");
return 1;
}


w----意义比较特殊
FILE *fp=fopen("a.txt","w");//w代表,不够有无a.txt,都会重新建立


利用两个fopen的返回值,来进行操作。






fp=fopen("a.txt","w+"); //a.txt仍然会重新建立。但也可以读了。


fp=fopen("a.txt","a"); //追加。 当无a.txt时,会新建 只能写文件,不能读


fp=fopen("a.txt","a+"); //也可以读






//如果a.txt文件存在,但内容为空,则会打印出 无效的数字
int main()
{
struct Student stu[3];
char buffer[20]={'\0'};
FILE *fp=fopen("a.txt","r");
int num;
fscanf(fp,"%d",&num);
printf("num is %d\n");


return 0;
}

//判断文件内容是否为 空 的语句
int main()
{
struct Student stu[3];
char buffer[20]={'\0'};
FILE *fp=fopen("a.txt","r");
fseek(fp,0,SEEK_END); //让游标走到文件末尾
int pos=ftell(fp); //返回当前游标的位置 利用特点:游标走到文件末尾,然后调用ftell,如果返回为0,就说明为空间。
printf("pos is %d\n",pos);


return 0;
}


333333
//feof(fp)的用法----判断是否到文件末尾了
代码:
#include
#include
#include


struct Student
{
int number;
char *name;
};
int main()
{
struct Student stu[30];
char buffer[20]={'\0'};
FILE *fp=fopen("a.txt","r");
int i=0;
//fseek(fp,0,SEEK_END);
//fseek(fp,0,SEEK_SET);




while(!feof(fp)) //如果文件没有到结尾,就执行 循环体
{


fscanf(fp,"%d %s ",&stu[i].number,buffer); //fp为磁盘文件。如果改为stdin,就成了从键盘文件读入了
stu[i].name=(char *)malloc(strlen(buffer)+1);
strcpy(stu[i].name,buffer);
i++;

}

for(int j=0;j<3;j++)
{
printf("%d %s ",stu[j].number,stu[j].name);
}

return 0;
}






文件读取函数
fprintf
fscanf


fgechchar
fgets


fread
fwite


rewind(fp)------游标回到起始位置 等价于 fseek(fp,0,SEEK_SET);

//例子:先将3个学生信息,写到文件;然后又从文件来读取,并打印输出
#include
#include
#include


struct Student
{
int number;
char *name;
};


int main()
{
FILE *fp;
fp=fopen("a.txt","w+"); //w+表示,能写入文件了,有增强了1下,所以也能读了
char buffer[30]="";
int i;

struct Student stu[3]={1001,"zhangsan",1002,"lisi",1003,"wangwu"};
for(i=0;i<3;i++)
{
fprintf(fp,"%d %s ",stu[i].number,stu[i].name);
}


rewind(fp);
for(i=0;i<3;i++)
{
memset(buffer,0,30); //memset的用:将buffer中的值,改为0,改30个----
fscanf(fp,"%d %s ",&stu[i].number,buffer); //fp为磁盘文件。如果改为stdin,就成了从键盘文件读入了
stu[i].name=(char *)malloc(strlen(buffer)+1);
strcpy(stu[i].name,buffer);

}

for(int j=0;j<3;j++)
{
printf("%d %s ",stu[j].number,stu[j].name);
}


return 0;
}

//fclose(fp)的用法----一定要用fclose,否则,输出缓存中的内容,可能还没有写到文件
int main()
{
FILE *fp;
fp=fopen("a.txt","w+");
char buffer[30]="";
int i;

struct Student stu[3]={1001,"zhangsan",1002,"lisi",1003,"wangwu"};
for(i=0;i<3;i++)
{
fprintf(fp,"%d %s ",stu[i].number,stu[i].name);
}
fclose(fp);



return 0;
}

容易犯错的地方:
1、1个文件只能用fopen打开1次,不要重复打开
2、要使用fclose关闭后,才能再次 打开
3、不需要的时候,文件要 及时 关闭


如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网