C
Mr JackZhang
学习需要正确的认识、路线、入门、实践、全面、教授、以及持之以恒
展开
-
第五十五章:预处理
test.i的内容都是来自/usr/include/stdio.h这个文件原创 2021-04-07 17:48:41 · 45 阅读 · 0 评论 -
第五十四章:文件版通讯录
test.ccontact.hcontact.c原创 2021-04-07 16:28:28 · 49 阅读 · 0 评论 -
第五十三章:文件操作
记事本看不懂二进制文件字符,vs可以,源文件–>添加–>现有项。具体的二进制文件,然后右击以二进制打开、如果以字符写入,那就记事本打开直接编辑记事本写入10000所有流代表文件流+标准输入、输出流写读通过流进行读写...原创 2021-04-07 16:27:15 · 45 阅读 · 0 评论 -
第五十二章:动态容量通讯录
test.ccontact.hcontact.c原创 2021-04-07 11:13:27 · 44 阅读 · 0 评论 -
第五十一章:动态内存管理
free释放的一定是动态开辟的内存空间,数组不需要free,如果释放的是空指针其实无意义如果p是NULL;那么等同于malloc常见错误p是临时变量,调用结束p的生命周期结束,开辟以后想释放都释放不了了示例示例改正...原创 2021-04-06 18:00:50 · 48 阅读 · 0 评论 -
第五十章:通讯录
test.ccontact.c查询联系人下标添加联系人、展示联系人查找联系人删除联系人修改contact.h原创 2021-04-06 15:42:41 · 41 阅读 · 0 评论 -
第四十九章:结构体
结构体自引用结构体初始化计算偏移量原创 2021-04-05 15:53:33 · 52 阅读 · 0 评论 -
第四十八章:字符串函数
字符串拷贝库函数字符串拷贝注意事项字符串追加字符串比较字符串拷贝原创 2021-04-02 17:50:03 · 46 阅读 · 0 评论 -
第四十七章:指针练习
int arr[7]={0};int (*p)[7]=&arr;&arr是用数组指针接收原创 2021-04-02 16:45:11 · 43 阅读 · 0 评论 -
c语言作业
输出逆序字符串求前n项之和判断水仙花数打印菱形左边放偶数右边放奇数杨辉三角字符逆序旋转字符串1是否是字符串2旋转得到原创 2021-04-02 16:23:50 · 46 阅读 · 0 评论 -
第四十六章:指针3
把“abcdef”字符数组首地址赋给p,因为“abcdef”是一个字符串常量,存储在常量区,常量区存储的东西是不能够被修改的。在存储器的栈区产生一个指针变量p指向常量区的字符串“abcdef”,所以后面不能通过指针来修改该字符串。解引用是直接修改常量区的值,不被允许,我们说把变量值更换其实是更换了变量的引用指向新的地址,原先的地址依旧保留内存值数组指针二维以上数组指针才方便...原创 2021-03-29 17:05:49 · 79 阅读 · 0 评论 -
第四十五章:数据的存储
类型决定看待内存的视角整型构造类型+指针类型+空类型这里是c规定如果没有规定形参,那么可传可不传,不会报警告整型(正整数、负整数)才有原码、反码、补码的说法。无符号整数(正整数)也是原码、反码、补码只不过它们都相同大端和小端存储无符号的补码和原码一样死循环了(类型决定内存如何看待二进制字节,这里始终满足循环条件)这里也死循环了(256被转换成一个二进制数又被翻译成一个【0-255之内的数】)不同数据类型存取方式不一样...原创 2021-03-29 15:41:57 · 43 阅读 · 0 评论 -
第四十四:指针2
野指针问题未初始化报错(可以int* p=NULL)#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<string.h>int main(){ int* p; *p = 20; return 0;}数组越界访问*p++=i的等价写法指向地址的内存空间被释放(局部变量未加static时发生该情况)解决方案:用完置为空指针使用之前要判断可用性指针加减整数指针减指针是原创 2021-03-29 10:34:44 · 44 阅读 · 0 评论 -
第四十三章:指针1
数组类型就等于跳步的步长,如果是int[ ]那么用char类型就会只访问了一个字节,一次改一个字节,如果arr[0]=00000000 00000000 00000000 00000001,那么第一次地址指向00000000的位置,解引用设置为1,那么00000001。全新的结构是000000001 00000000 00000000 00000001...原创 2021-03-28 16:09:23 · 40 阅读 · 0 评论 -
第四十三章:隐式类型转换
隐式原创 2021-03-28 15:09:48 · 61 阅读 · 0 评论 -
第四十二章:操作符
右移右移针对负数。打印的是原码,存的是补码。针对-1,右移左边补符号位,所以还是-1.左移位操作位运算示例求解一个数二进制位在内存中1的个数正数可以这样解正负数都可以时,如果一个数异或二进制的1就可以逐个取到1的个数赋值运算符单目运算符逻辑操作符逗号表达式...原创 2021-03-28 14:35:57 · 41 阅读 · 0 评论 -
第四十一章:扫雷游戏
game.h#include<stdio.h>#include<string.h>#include<stdlib.h>#include<time.h>#define ROW 9#define COL 9#define ROWS ROW+2#define COLS COL+2#define EASY_COUNT 80void initBoard(char board[ROW][COL],int rows ,int cols,char se.原创 2021-03-26 14:57:22 · 42 阅读 · 0 评论 -
第四十章:自动关机
只要打开服务列表,找到可执行命令exe的对应命令加入程序并配置“自动”的可执行命令就会配置成开机启动原创 2021-03-26 11:05:01 · 35 阅读 · 0 评论 -
第三十九章:找出数组只出现一次的数字
原始优化:原创 2021-03-26 11:00:32 · 49 阅读 · 0 评论 -
第三十八章:交换数字
第一种方法:使用加减乘除第二种:引入第三个变量第三个:按位异或原创 2021-03-26 10:45:46 · 97 阅读 · 0 评论 -
第三十七章:三子棋
#include<stdio.h>#include<string.h>#include<stdlib.h>#include<time.h>#define ROW 3#define COL 3initBoard(char board[ROW][COL],int row ,int col);displayBoard(char board[ROW][COL], int row, int col);#define _CRT_SECURE_NO_W原创 2021-03-25 18:03:56 · 50 阅读 · 0 评论 -
第三十六章:递归
函数调用、局部变量声明都是在栈上开辟空间,生命周期结束会释放栈空间#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<string.h>void print(int n){ if (n > 9){ print(n / 10);//再次调用函数 } printf("%d", n % 10);}int main(){ unsigned int num = 0; scanf("%d", &am.原创 2021-03-25 14:27:01 · 51 阅读 · 0 评论 -
第三十五章:自定义函数
#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<string.h>#include<windows.h>#include<stdlib.h>void swap1(int x,int y){ int tmp = 0; tmp = x; x = y; y = tmp;}void swap2(int* pa, int* pb){ int tmp = 0; tmp = *pa原创 2021-03-24 15:02:47 · 72 阅读 · 0 评论 -
第三十四章:库函数相关
IO函数字符串操作函数内存操作函数时间日期函数数学函数其他库函数这些都是C内置的只要引入头文件即可使用相关文档请查阅www.cplusplus.com或https://zh.cppreference.com/参看使用字符在内存存储的都是ascii码值的二进制序列,所以形参是int 可以传char...原创 2021-03-24 15:01:23 · 50 阅读 · 0 评论 -
第三十三章:程序示例——密码三次输入
#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<string.h>int main(){ int i = 0; char password[20] = { 0 }; for ( i = 0; i < 3; i++) { printf("请输入密码:"); scanf("%s",password); if (strcmp(password, "123456") == 0){ pri原创 2021-03-24 10:36:22 · 132 阅读 · 0 评论 -
第三十一掌:二分查找算法
#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<string.h>int main(){ int arr[] = {1,2,3,4,5,6,7,8,9}; int k = 7; int size = sizeof(arr) / sizeof(arr[0]); int left = 0; int right = size - 1;//如果是char []="abc" 那么就要size-2因为\0在数组下原创 2021-03-24 10:36:14 · 38 阅读 · 0 评论 -
第三十二章:程序示例——渐变打印
#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<string.h>#include<windows.h>#include<stdlib.h>int main(){ char arr1[] = "welcome to world"; char arr2[] = "################"; int left = 0; int right = strlen(arr1)原创 2021-03-24 10:36:06 · 204 阅读 · 0 评论 -
第三十章:输入输出函数
EOF字符int main(){ int ch = 0; //ctrl+z //EOF,实际是文件结束符,也就是-1 while (ch=getchar()!=EOF){ putchar(ch); } return 0;}输入输出bug#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<string.h>int main(){ int ret = 0; char password.原创 2021-03-23 17:19:21 · 154 阅读 · 0 评论 -
第二十九章:单目运算符
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h>#include <string>int main(){ //在C中非0为真,0为假 int a = 10; printf("%d\n", !10); //"~"把数的二进制按位取反得到0000 1010-->1111 0101 //负数在内存中存的是二进制补码(以1开头的补码),打印的是源码。a是有符号整型,最高位是符号位(1为正0为负) printf(原创 2021-03-22 17:55:31 · 139 阅读 · 0 评论 -
第二十八章:各个字符区别
//字符0char a='0';//转义字符,代表字符‘0’所对应的ascii码表对应的数字,即所对应的字符0,等价于0;char b[]={'\0'};//数字0int c=0;原创 2021-03-22 17:01:33 · 55 阅读 · 0 评论 -
第二十七章:位操作
#define _CRT_SECURE_NO_WARNINGS#define MAX 10 #include<stdio.h>#include <string>int main(){ //int占四个字节,一个字节占4比特,即2的10次方,表示为“0000 0000 0000 0001” int a = 1; //移位操作:左移一位:因为空间大小固定,往左移动左边一位的“0”舍弃,右边补一个“0”,即【0【0000 0000 0000 0010】】移位本身原创 2021-03-22 16:29:37 · 52 阅读 · 0 评论 -
第二十六章:代码结构
#define _CRT_SECURE_NO_WARNINGS#define MAX 10 //第三种#define:定义的标志符常量#include<stdio.h>#include <string>int main(){ //选择结构 int input = 0; printf("请输入\n"); //取变量input地址,把输入的值放入该地址 scanf("%d", &input); if (input == 1){ printf原创 2021-03-22 16:04:18 · 73 阅读 · 0 评论 -
第二十五章:转义字符
#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include <string>int main(){ printf("\n");//转义字符,即转变原来的意思,如果需要打印包含转义字符的字符串,即避免解析成转义字符,那就再加个“\” printf("%d\n", strlen("a\tb"));//字符串会被优先匹配转义字符,\t会是一个转义字符所以结果是3 printf("%c\n", '\x61');//\x61代原创 2021-03-22 15:34:47 · 156 阅读 · 6 评论 -
第二十四章:字符串表示
#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include <string>int main(){ char arr1[] = "abc";//{'a','b','c','\0'} char arr2[] = {'a','b','c'}; char arr3[] = { 'a', 'b', 'c', 0 }; printf("%s\n", arr1);//abc printf("%s\n", arr2);//ab原创 2021-03-22 15:33:24 · 49 阅读 · 0 评论 -
第二十三章:常量
#define _CRT_SECURE_NO_WARNINGS#define MAX 10 //第三种#define:定义的标志符常量#include<stdio.h>enum Sex{ MALE, FEMALE, SECREAT, 男, 女};int main(){ //4 第一种常量:字面常量 const int a = 4;//第二种常量:常变量。const代表常属性,不能再被赋值 //int arr[a] = { 0, 1, 2, 3 };原创 2021-03-22 14:16:54 · 44 阅读 · 0 评论 -
第二十二章:变量
全局变量:定义在代码块之外的变量。作用域是整个工程,包括其他".h"、".c"文件,别的文件中定义的全局变量在本文件使用需要extend关键字申明才可以使用局部变量,定义在大括号(代码块)内部的变量,作用范围是最近的大括号。原则:局部变量和全局变量不要取同名,如果同名,大括号内部局部优先引用,而全局可以出现在任何位置,如果是和局部不同名的情况下...原创 2021-03-19 17:08:22 · 76 阅读 · 0 评论 -
第二十一章:定义变量与打印
使用int、long、float、double、char这样的数据类型向内存申请对应大小的空间,注意97.8默认是double类型,如果float a=94.8 会出现警告,可以float a = 94.8f 这样去定义。当我们打印时,可以按指定的格式,如 d% 、o%、 c%去告诉编译器按什么形式去打印,比如char a=‘A’ ,实际存储的是90的二进制数进去了,最后取出的时候可以c%去取就是字符A,如果d%去取就是告诉编译器按整数去翻译二进制数取出来就是90...原创 2021-03-19 16:48:24 · 176 阅读 · 0 评论 -
第二十一章:指针
一个字节一个地址,用户使用的只使用首地址。如下是硬盘(rom)的加载到内存(ram)的过程指针与指针变量:指针是不同数据类型首个(头)字节的编号地址(相当于门牌号),而指针变量是计算机控制的一个变量,通过给这个变量(相当于服务员)在运行期间赋值完成访问(相当于持门牌号的服务员,服务员拿到计算机给的门牌号去匹配门牌号)...原创 2020-11-17 15:10:57 · 138 阅读 · 0 评论 -
第二十章:函数声明与头文件
#include <stdio.h>//定义函数在main之后必须声明,声明的地方是任意的可以在main之外、之内,加不加extern是等价的,且声明可以只写类型不写形参名,且写的形参名和定义的可以不一致,可以只声明不定义,声明次数没有限制//统一规范要求:main外声明一次,定义与声明形参一致,main内调用extern int my_strlen(char str[]);//等价int my_strlen(char str[]);====int my_strlen(char)====i原创 2020-11-13 15:25:02 · 1923 阅读 · 0 评论 -
第十九章:函数demo之计算器
#include <stdio.h>#include <string.h>int main(void){ calc_demo(); return 0;}int calc_demo(){ char cmd[5]={0}; int a=0,b=0,i=0; while(1){ printf("please input method and 2 params:\n"); scanf("%s %d %d",c原创 2020-11-13 14:02:00 · 114 阅读 · 0 评论