- 博客(92)
- 收藏
- 关注
原创 三十四、指针详解(6)
/cmp是不同方法的比较函数,e1和e2是接收要比较的两个元素的地址。void* base, //目标数组的起始位置。size_t width, //每个元素的大小。size_t num, //数组的大小。void*指针,(无 / 空)指针(泛型指针类型),接收任意类型的地址。void*指针类型不能进行+ / -整数的操作。//这也是错误写法,
2024-12-22 02:00:00 511
原创 三十三、指针详解(5)
1.写一个函数指针pf,指向my_strcpy2.写一个函数指针数组pfArr,能够存放4个my_strcpy函数的地址。
2024-12-22 01:00:00 210
原创 三十二、指针详解(4)
(1)void(*) ():函数指针把0强制类型转换成一个函数指针类型,该函数无参,且返回类型为void,再以0为该函数的地址,对其解引用调用该函数。(2)signal(int, void(*)(int)):函数(int, 函数指针)把这个函数当作一个函数指针函数指针的指针是个函数,该函数有一个int类型和一个函数指针类型的参数。typedef对void(*)(int)函数指针类型重定义signal是一个函数声明;
2024-12-21 02:00:00 176
原创 三十一、指针详解(3)
例:一维数组传参:传参:test(arr1);指针数组传参:传参:test(arr2);int**:二级指针arr2是一个int*类型的指针,用int**接收。二维数组传参(首元素是第一行的数组的地址):传参:test(arr3);
2024-12-21 01:00:00 623
原创 三十、指针详解(2)
/parr3是一个指针数组,该数组有十个元素,每个元素是一个数组指针,该数组指针指向的数组有五个元素,每个元素类型是int。//parr2是一个数组指针,指向的数组存放十个整型数组的地址。//pa是数组地址,*pa是数组首地址。int(*p)[5] 数组指针 (*p) -> int[5]//arr是有五个整型元素的数组(整型数组)int* p [5] 指针数组 [5] -> int*parr3数组 类型:int(*[10])[5]
2024-12-20 02:00:00 280
原创 二十九、指针详解(1)
首地址以字符形式输出,可输出整个字符串。p存放a的地址,const修饰后,字符串的内容不允许被修改。const修饰*p,*p指向的内容不能被修改。
2024-12-20 01:00:00 462
原创 二十八、数据的存储(4)
E = 1 - 127 / 1 - 1023,得到真实值,有效数字M不再加上第一位的1,而是还原为0.XXX的小数,这是为了表示。M:可写成1.XXX的形式,XXX表示小数部分,因为总有一个1,所以省略,读取的时候,再补上去,提高了精度。规定,存放进内存的E,E的真实值必须再加上一个中间值 = 计算值(存储值),为了避免负数。E = E - 127 / -1023,得到真实值,再将有效数字M前加上第一位的1.表示符号位,S = 0,表示正,S = 1,表示负。(1)E不全为0 / 不全为1。
2024-12-19 02:00:00 980
原创 二十七、数据的存储(3)
9 8 7 6 5 4 3 2 1 0 -1 -2 ...(i是无符号数,当i为负数时,将负数的补码当作原码。表示符号位,S = 0,表示正,S = 1,表示负。M表示有效数字,1 <= M <=2。无符号数的大圈规律,死循环。定义无符号数变量容易死循环。%f输出小数点后6个数。
2024-12-19 01:00:00 520
原创 二十五、数据的存储(1)
(因为CPU只有加法器,使用补码可以将符号位和数值位统一处理。例如:1 - 1可以看作1 + (-1))(1)使用这个类型开辟内存空间的大小(大小决定了使用范围)大端(存储)模式:数据低位存放在高地址,高位存放在低地址。小端(存储)模式:数据低位存放在低地址,高位存放在高地址。原码有符号位和数值位两部分,符号位,0表示正,1表示负。有符号是把最高位当作符号位 singed。(2)如何看待内存空间的视角(在内存中如何进行存储)-> void(无类型)(无参)无符号数,原码 = 反码 = 补码。
2024-12-18 11:09:24 355
原创 二十三、VS实用调试技巧(2)
Debug,调试版本,包含调试信息,并且不作任何优化,便于程序员调试程序;Release,发布版本,进行了各种优化,使程序在代码大小和运行速度上都是最优的,以便用户很好地使用。生成的.c文件会产生一个可执行程序.exeDebug模式下,会产生一个Debug版本的.exe运行结果可能不同Release模式下,会产生一个Release版本的.exeWindows环境调试介绍:F5 启动调试F9 断点直接跳到下一个断点处(执行逻辑的下一个断点处)
2024-12-14 01:00:00 389
原创 引用绝对位置的函数头文件
但这样执行编译下来会报错,查找错误下来,原来是,我把所有的函数头文件都包含在同一个.h文件里面,这样所有的.c文件都只引用这一个函数头文件即可,但我把相关功能的.c文件重新新建文件夹放置了,改变了其原有的位置,和引用的.h文件不在同一文件目录下,导致编译后,提示我的函数没有声明。在程序设计中,如果创建的.c文件过多的话,碰到要修改的时候,找起来很麻烦,看的人眼花缭乱的。为了解决这一问题,我在每个.c文件引用头文件时,加上了.h的位置,也就是绝对位置。选择.h文件右键 -> 属性 -> 复制位置。
2024-12-11 11:46:31 324
原创 十六、操作符详解(1)
,两个操作数至少有一个为浮点数,结果才能为浮点数,保留小数部分结果。一个数按位与一个比它小1的数,会把它本身最低位的1变成0。右移 舍弃低位,最高位补符号位。对于移位操作符,不能移动负数位,这个未定义。左移:a>>1 右移:a<<1。对于二进制位,只要最低位为1,一定为奇数。例:int arr [10] = {0};%,操作符必须都为整数,且结果也为整数。左移 舍弃高位,低位补0。右移 舍弃低位,高位补0。左移 舍弃高位,低位补0。
2024-12-10 00:45:00 797
原创 十五、扫雷
int i = 0;int j = 0;for(i = 0;i < rows;j < cols;int j = 0;//打印列号for(j = 0;j <= col;i <= row;i++)//打印行号for(j = 1;j <= col;int y = 0;count--;int x = 0;int y = 0;//计算坐标周围雷的个数。
2024-12-09 02:00:00 380
原创 十四、公开课
b = a - b;b = a ^ b;a = a - b;a = a ^ b;有整型溢出问题 按位异或,无溢出问题异或:a ^ 0 = a,a ^ a = 0a ^ b ^ c = a ^ c ^ b(交换律)
2024-12-09 00:45:00 366
原创 十三、C语言实现三子棋
int i = 0;int j = 0;for(i = 0;i < row;j < col;j++)//初始化棋盘为空格/* | || || |*/int i = 0;int j = 0;for(j = 0;j <= col;j++)//打印列号for(i = 0;i < row;i++)//数据行for(j = 0;j < col;j++)if(j < col - 1)//最后一列不打印分割列//分隔行。
2024-12-08 03:30:00 325
原创 十二、数组(2)
冒泡排序:将一个整型数组排序(升序)例:......9 8 7 6 5 4 3 2 1 10 //一次排序最终结果10个元素,9趟比较推论:n个元素,一共n-1趟比较。第1趟,比较n-1次第2趟,比较n-2次......第m趟,比较n-m次......第n-1趟,比较1次例:for(i = 0;i < sz - 1;
2024-12-08 01:00:00 665
原创 十一、数组(1)
一维数组使用下标访问数组每个元素,一维数组的元素在内存中是连续存放的,数组名是首元素的地址。例:int arr [3] [4] = {1,2,3,4,5};例:int arr [ ] [4] = {{1,2,3,4},{5,6,7,8}};arr [1] [i] //第二行。二维数组的元素在内存中排列是,从左到右,从上到下原则。例:arr [0] [i] //第一行。例:int arr [10] = {1,2,3};通过下标访问二维数组的元素,行和列都是从0开始的。
2024-12-07 01:15:00 357
原创 宏定义Case
使用时,只需要Case('logotype', proc);每一个实际的case都自带了break,很方便使用。proc是处理过程,可以是函数也可以是别的处理过程。logotype可以是字母也可以是数字。
2024-12-07 01:00:00 83
原创 十、函数(3)
递归分为,进入和逃离两个部分,分别记录;递到终止条件,归到第一步进入。递归和迭代:(1)递归是重复调用函数自身实现循环,满足中止条件逐层返回结束;(2)迭代是一个重复过程,在上一次的基础上计算/处理。(3)结构上,递归用选择结构,迭代用循环结构。(4)递归有栈溢出问题,迭代没有。
2024-12-06 03:45:00 298
原创 九、函数(2)
在函数声明中,例:Add.h头文件#ifndef _ADD_H_ //如果没有定义,再往下#define _ADD_H_ //定义这个函数//函数声明#endif。
2024-12-06 01:00:00 652
原创 八、函数(1)
自定义函数:返回值类型 函数名 (参数)函数体;.c主函数源文件中调用自定义函数用" ",例:#include "Add.h".c函数定义源文件//函数定义return z;
2024-12-05 15:44:38 643
原创 七、分支和循环(3)
c = a * 1.0 / b 或 c = a / b * 1.0 或 c = a * 1.0 / b * 1.0。被除数从100到200循环,除数从2到被除数,依次进行除法对比,当%为0时,跳出,当被除数 = 除数时,则为素数打印。int a = rand() % 100 + 1 //%100,产生0~99之间的数。a % b = 6 b % 6 = 0(能整除时,除数是最大公约数。//生成随机数的起始点(种子),而且seed要变化,void是空类型。
2024-12-05 04:45:00 698
原创 六、分支和循环(2)
输入缓冲区的概念:scanf输入函数 从输入缓冲区中读取数据getchar()例:输入缓冲区:123456\n(回车)而输入函数scanf只读123456,剩一个回车,会影响下一次输入函数读取数据,所以应清空输入缓冲区的数据。遇到以下情况,认为是一组数据输入结束:(1)空格、Tab/回车(2)达到输入位宽(3)遇到非法字符连续两个输入函数,需要在中间加一个输入函数来清空输入缓冲区。
2024-12-04 09:50:17 905
原创 windows系统删除流氓文件
有时候在windows系统中,要删除一些文件时,电脑会要求什么什么管理员权限,但当你照着网上的步骤,一步一步修改文件属性后,发现最后还是删除不了,很烦人,下面介绍一种快速删除文件的方法,一劳永逸。将想要删除的文件拖拽到该文件上方松开,该文件就被删除了。此方法仅适用于windows系统。修改文本文件后缀名为.bat。2.文本文件中输入以下代码。1.新建文本文件.txt。
2024-12-03 06:15:00 177
原创 四、初识C语言(4)
(结构体变量).成员 (*结构体变量的指针变量).成员。例:strcpy(a, "b");//把b字符串数组的内容拷贝给a。:字符串拷贝,字符串数组内容修改。#include <string.h>结构体:自己创建的一种描述复杂对象的一种类型 (相当于变量的数据类型)结构体变量的指针变量 -> 成员。地址指向:指针->成员。内容指向:内容.成员。
2024-12-02 10:10:36 568
原创 三、初识C语言(3)
typedef例:typedef unsigned int u_int;相当于例:#define MAX 100例:#define MAX(x,y)(x>y?x:y)(无参数类型)宏模块之间不能有空格调用:定义了一个MAX(x,y)的宏//#define定义宏x:y)int a = 0;int b = 0;int c = 0;printf("最大值是:%d\n", c);return 0;
2024-12-02 10:04:30 1252
原创 一、初识C语言(1)
1>e:\c\projects\test\test\test.c(5): warning C4305: “初始化”: 从“double”到“float”截断。C语言是一门计算机语言,而计算机是硬件,硬件分通电(1)和 未通电(0)两种情况,所以C语言识别的都是0 / 1信号,也就是二进制语言。//std -> 标准 io -> 输入、输出 .h -> 头文件。bit(比特/位) —> Byte(字节) —> KB —> MB —> GB —> TB。
2024-11-07 15:43:54 854
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人