算法排序
冒泡排序 1理解算法的方式
指针
#include <stdio.h>
/**
为什么存储多个数据时需要数组:
int a = 10;
不知道你需要多少内存空间 int * size = total
向系统申请一片连续的内存空间 -> 存什么值
什么是指针?
指针就是一个变量类型(指针类型) 存地址
为什么需要指针?
传值(1.copy一份传过来 2.传地址)
操作内存空间
怎么用?
1.什么时候需要指针变量
需要保存地址的时候
2.指针变量的特点 *
int *a //整形的指针变量 这个指针变量只能存整数变量的地址
float *a
char *a
3.定义指针变量时一定要赋初值
int *a = NULL
int *a = 0; //错误 指针变量只能存地址
4.使用 & 获取某个变量的地址
int a = 10;
int *pa = &a;
5.*号的两种情况
1.定义一个变量时 使用*号表示是一个指针变量
2.取某个地址的值 *pa == 取pa指向的内存的值
*/
int main() {
int a = 0;
int *pa = &a;
*pa = 20;
return 0;
}
//排序 姓名排序 a-z
//函数
//ATM的demo使用函数的方式实现一下
//结构体 -> 结构体指针
//文件 (创建打开 写入 读取数据)
//动态分配内存
//单链表
//简单的学生管理系统
/**
* 自己选一个Demo 录制视频
* 抛出问题 -> 分析 -> 边说边敲 -> 总结
* 1.招生
* 2.线上
*/
int main() {
/**
* 指针
* 1.变量类型
* 2.指针变量保存:地址
* 3. *
* a.定义变量->表示是一个指针变量
* b.访问指针变量的值
* 4. & 去某个变量的地址
*
* 数组
* 数组名就是整个数组的首地址
*
* 内存空间
* int 4
* double 8
* float 4
* long 8
* char 1
* 指针变量 8
*
* void * 任意的指针类型
* 当使用这个地址时 必须明确告诉这边内存空间需要存储什么类型的值
*/
// int a = 10;
// int *pa = &a;
//
// printf("%lu\n", sizeof(pa));
//
// char c = 'B';
// char *pc = &c;
// printf("%lu\n", sizeof(pc));
//
// long size = 200;
// long *pSize = &size;
// printf("%lu\n", sizeof(pSize));
//
// char name[20] = {};
// printf("%lu\n", sizeof(name));
//浪费空间 - 内存溢出
//动态改变内存空间(增加 减少)
//malloc (memory alloc) 创建内存空间
//realloc 对已经分配的内存空间进行改变(增加 减少)
//free 不需要了 就释放内存空间
//谁申请/拥有 谁释放
//1.第一次分配内存空间
// size 需要分配的内存空间(字节空间)
//分配连续的内存空间 == 数组
//void *
//int *
int *pTemp = (int *)malloc(1 * sizeof(int));
//判断是否成功
if (pTemp == NULL){
//内存空间申请失败
exit(EXIT_FAILURE);
}
//自己的操作
pTemp[1] = 1;
// 需要存2个数据
// 地址必须是使用malloc分配的
// 1. 重新分配一片能够容纳2个int的内存空间
// 2. 将之前分配的内存空间的值copy到当前内存空间中
// 3. 将原来的内存空间释放掉
// 4. 返回新的地址
int *pRTemp = (int *)realloc(pTemp,2*sizeof(int));
if (pRTemp == NULL){
//如果realloc失败
//必须先将原来申请的内存空间释放
free(pTemp);
}
pTemp = pRTemp;
//不需要的时候 释放内存
free(pTemp);
return 0;
}
Demo
#include <stdio.h>
#include <stdlib.h>
/**
* 从终端输入字符串
*/
int main() {
//需要定义字符指针变量 保存分配的内存空间 -> 保存字符串
char *pSentence = NULL;
//记录当前保存几个了
int index = 0;
while (1){
//接收用户输入的字符
char ch = getchar();
//语句是否输入完成
if (ch == '\n'){
break;
}
//是不是第一次申请内存
if (index == 0){
pSentence = (char *)malloc(1*sizeof(char));
if (pSentence == NULL){
exit(EXIT_FAILURE);
}
}else{
char *pTemp = realloc(pSentence,(index+1)*sizeof(char));
if (pTemp == NULL){
free(pSentence);
exit(EXIT_FAILURE);
}
pSentence = pTemp;
}
pSentence[index] = ch;
index++;
}
//用于存储字符结束的标志 '\0'
char *pTemp = realloc(pSentence,(index+1)*sizeof(char));
if (pTemp == NULL){
free(pSentence);
exit(EXIT_FAILURE);
}
pSentence = pTemp;
pSentence[index] = '\0';
free(pSentence);
return 0;
}