局部变量和全局变量
先来看一个例子,设计两个函数,每一个函数的功能是让a加一,最终实现a等于2
#include<stdio.h>
void funA(int a){
a++;
}
void funB(int b){
a++;
}
int main(){
int a=0;
funA(a);
funB(a);
printf("%d",a);
return 0;
}//输出的结果是0;
显然这样设计函数是不行的,要实现这个a等于2,必须传指针解引用,可以这样实现:
void funA(int*a) {
(*a)++;//注意++的运算优先级高于*,所以要加()
}
void funB(int* a) {
(*a)++;
}
int main() {
int a = 0;
funA(&a);
funB(&a);
printf("%d", a);
return 0;
}//a的值为2;
试着将a设置为全局变量
int a = 0;//全局变量,整个项目有效
void funA() {
a++;
}
void funB() {
a++;
}
int main() {
funA();
funB();
printf("%d", a);
return 0;
}//a=2
如果在两个文件,需要用其中一个文件里定义的全局变量,则需要使用关键词extern;
//test.cpp
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include<string.h>
int a = 0;//全局变量,整个项目有效
extern void fun();
void funA() {
a++;
}
void funB() {
a++;
}
int main() {
funA();
funB();
fun();
printf("%d", a);
return 0;
}//a=10
//test2.cpp
extern int a;//a在其他文件定义过,需要LINK
void fun() {
a = 10;
}
静态局部变量:局部可见,本文件有效
文件基本概念
文件:存储外部介质上的数据的集合
磁盘:永久地数据存储
内存:断电即消失
文本文件:又称ASCII文件,数据以ASCII代码形式存储
二进制文件:数据以二进制形式进行存储 比如:多媒体文件,图片
模式(权限)
文本文件: r只读 w只写 a追加写
r+读写 w+读写 a+读写
二进制文件:rb只读 wb只写 ab追加写
rb+读写 wb+读写 ab+读写
文本文件:
r只读:文件必须存在
w只写:文件可存在,可不存在,存在,覆盖;不存在新创建
a追加写:若文件存在,光标移动到文件的末尾,进行数据写入,若不存在,新创建
r+读写:文件必须存在
w+读写 a+读写
文件操作函数
fopen() fread() fwrite() fclose()
练习:将test1.cpp文件的内容拷贝一份到new.cpp
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include<string.h>
int main() {
FILE* fp1 = fopen("test1.cpp", "r");
if (fp1 == NULL)return -1;
FILE* fp2 = fopen("new.cpp", "w");
if (fp2 == NULL)return -1;
int num = 0;
char buff[256] = { 0 };
while (num = fread(buff, 1, 256, fp1)) {
fwrite(buff, 1, num, fp2);
memset(buff, 0, 256);
}
fclose(fp1);
fclose(fp2);
return 0;
}
//最后可以将其封装成为一个函数
void copyfile(const char* pathnewfile, const char* patholdfile) {
if (pathnewfile == NULL || patholdfile == NULL)return;
FILE* fp1 = fopen(patholdfile, "r");
if (fp1 == NULL)return ;
FILE* fp2 = fopen(pathnewfile, "w");
if (fp2 == NULL)return ;
int num = 0;
char buff[256] = { 0 };
while (num = fread(buff, 1, 256, fp1)) {
fwrite(buff, 1, num, fp2);
memset(buff, 0, 256);
}
fclose(fp1);
fclose(fp2);
}
int main() {
copyfile("E:/new.txt","E:/1.txt");
return 0;
}
\在C语言中,\ 具有转义字符的作用所以需要用 \,也可用 / 来代替 \
给你个文件(例如:成都.mp3)如何计算文件大小?(提示,使用
fseek 和 ftell 函数)
#include <string>
int mian() {
FILE* file = fopen("aaa.cpp","r+");
if (file == NULL)
{
printf("打开文件失败");
return -1;
}
fseek(file, 0, SEEK_END);//定位到文件的最后面
long length = ftell(file);//ftell获得该文件指示符此时的偏移量,此时已经是在文件末尾,故能获得文件的大小
printf("%ld", length);
fclose(file);
return 0;
}