1.c指针—— 地址和内存空间
为什么要指针:解决跨区域(不同作用域 不同代码块)之间的数据交互
‘*’a.声名/定义变量的时候 表示一个指针变量
例:int *a;定义一个指针变量 指向的内存空间只能存整数
注意:定义整形指针变量一定要存整形数据的地址,不能存具体值。不确定就给NULL。
b.除了定义指针变量之外 都是访问定义某个地址的值
例:int *temp=&c;
*temp=21;访问tem地址的数据 赋值为21.
指针变量在内存里占8个字节
2.数组和指针的关系
数组名并不是一个变量 没有分内存空间
定义一个数组 系统会分内存空间 可以存值
定义一个指针变量 只为变量本身分配8个内存空间 无法存值 因为没有为他分配的内存空间
1.指针变量如何存值:
第一种:分配的内存都是别人的:系统自己释放内存
a. int a=3; int *pa=&a; *a=30;
b. int temp[20]={} ; int *pb=temp; (pb+0)=20/pb[0]=20;
第二种:动态分配内存:自己分配内存自己释放
导入头文件:#include <>
a. sizeof(int)表示int 的字节数
类型 变量名=malloc(个数sizeof(变量类型如int))
b. 判断是否分配成功
if(变量名==NULL)
{分配失败
exit(EXIT_F);
}
c. 释放内存: free(变量名);
d. 当之前的指针内存分配的不够或者多了的时候 使用realloc重新分配内存
如果是系统分配的内存 不能使用realloc
变量名=realloc(变量名,个数sizeof(类型))
释放内存
第三种:常量字符串是由系统分配内存空间
结构体:是一种数据类型 复合数据类型
使用struct
例子:声明一种类型
struct Person == int
struct Person
{
char name[10];
char *addr;
int age;
};
int i1 = 10;
赋值: struct Person zs = {"张三", 20};
赋值:
定义结构体struct Person变量 变量名xw
int i;
i = 20;
struct Person xw;
错误:xw.name = "小王";因为数组一旦定义 地址不能改变 不能直接给数组赋值
正确:xw.name[0] = 'x';//系统为这个变量分配内存了
xw.addr = "西南大学";//常量字符串的地址是由系统分配的
给指针addr赋值 先为addr分配内存
xw.addr = malloc(4 * sizeof(char));
xw.addr[0] = 'S';//字符指针赋值 必须要有内存
xw.addr[1] = 'o';
xw.addr[2] = 'u';
xw.addr[3] = 't';
xw.age = 30;
printf("name:%s\n", xw.name)
文本的使用:
打开文件:
右键 - 运行 - cmd - 终端 - 拖一个文件到终端得到路径
win + r
C:\Users\pxd\Desktop\abc.txt
Users/pengxiaodong/Desktop/abc.txt
mode 文件的操作模式
r 只读 文件不存在就报错 从头开始读
w只写 文件不存在就创建 从头开始写
a 只写 从末尾开始写
r+ w+ a+ 可读可写
fclose(fp) ;
fopen_s(&fp, "/Users/ASUS/Desktop/abc.txt", "w");
写入文件 "w" fputs("abc", fp);
读取数据 "r" char temp[20] = {}; fgets(temp,3,fp)
写入数据 "a+" fwrite(&xw, sizeof(struct student), 1, fp);
写入数据
音频 视频 图片 -> 二进制数据
fputs("abc", fp);
struct Student {
char name[10];
int age;
};
struct Student xw1 = {"xiaowang", 20};
将结构体写到文件里面去
fwrite(&xw1, sizeof(struct Student), 1, fp);
读取数据1.
char temp[20] = {};
gets(temp, 5, fp);
printf("%s\n",temp);
读取数据2.
struct Student xw1;
fread(&xw1, sizeof(struct Student), 1, fp);
printf("name: %s\n", xw1.name);
printf("age: %d\n", xw1.age);
关闭文件
fclose(fp);
感悟:今天讲的内容很多,由于我们不是很熟悉这段内容,所以听的比较辛苦,到最后的链表我更是听不懂了,但是虽然不是很懂,我还是听着,以防之后遇到这样的类型连个思路都没有。