C语言之_双重指针、多文件、include、文件
程序员文章站
2022-06-21 22:01:16
1、双重指针
#include
#include
#include
void modify_p(int *p)
{
*p=*p+1;
}
int ma...
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、不需要的时候,文件要 及时 关闭
下一篇: npm包发布记录