自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 收藏
  • 关注

原创 野指针,指针运算

标准规定:允许指向数组元素的指针与指向数组最后一个元素后面的那个内存位置的指针比较,但是不允许与指向第一个元素之前的那个内存位置的指针进行比较。1.指针初始化 2.小心指针越界 3.指针指向空间释放及时放置NULL 4.避免返回局部变量的地址 5.指针使用之前检查有效性。野指针,概念:野指针就是指针指向的位置是不可知的(随机的,不正确的,没有明确限制的)指针运算(有指针和常量,有指针-指针,这里主要讲指针-指针)指针-指针得到的绝对值是指针和指针之间元素的个数。例:指针-指针求字符串长度。

2024-05-01 20:25:00 40

原创 指针是什么,指针和指针类型

指针类型的意义:1.指针类型决定了指针在被解引用的时候访问几个字节。如果是int* 的指针,解引用访问的是4个字节。如果是char* 的指针,解引用访问1个字节。float* pf=&a //pf解引用访问4个字节,pf+1也是跳过4个字节。int* pi=&a //pi解引用访问4个字节,pi+1也是跳过4个字节。2.平时口语中说的指针,通常指的是指针变量,是用来存放内存地址的变量。指针变量是用来存放地址的,地址是唯一标示一块地址空间的。总结:指针就是地址,口语中说的指针通常指的是指针变量。

2024-05-01 20:23:42 52

原创 表达式求值

为了获得这个精度,表达式中的字符和短整型操作数在使用之前被转换为普通整型,这种转换称为整型提升。即使两个char类型相加,在CPU执行时实际上也要先转换为CPU内整型操作数的标准长度。同样,有些表达式的操作数在求值的过程中可能需要转换为其他类型。表达式求值的顺序一部分是由操作符的优先级和结合性决定。c的整型算术运算总是至少以缺省整型类型的精度来进行的。整型提升是按照变量的数据类型的符号位来提升的。

2024-05-01 20:13:58 37

原创 操作符优先级

操作符优先级是指在表达式中,不同操作符的执行顺序。请注意,如果表达式中有多个操作符,优先级高的操作符会先执行,如果优先级相同,则按照从左到右的顺序执行。19. 赋值运算符:= += -= *= /= %= <<= >>= &= ^= |=11. 关系运算符:<= >= < >5. 递增/递减:++/--(前缀)8. 乘法/除法/取模:*/%12. 相等/不等:==!4. 指针成员访问:->10. 移位:<< >>18. 条件运算符:?9. 加法/减法:+-16. 逻辑与:&&17. 逻辑或:||

2024-05-01 20:12:10 192 1

原创 逻辑操作符,条件操作符,逗号表达式,解引用操作符

测试题:(重点是:顺序是从左到右运算的,对于逻辑与&&,左边为假,右边就不计算了。逗号表达式,从左向右依次执行,整个表达式的结果是最后一个表达式的结果。例:&&全真为真(都为正数),有假则假(0或者负数)逗号表达式:表达式1,表达式2,....,表达式n。arr+7就是跳过7个元素,指向了第八个元素。对于逻辑||,左边为真,右边就不计算了)可以写成b=((a>5)?逻辑操作符:逻辑与&& 逻辑或||"||"只要有一个为真就为真。就是用逗号隔开的多个表达式。arr是数组首元素的地址。

2024-05-01 20:11:02 28

原创 位操作符,赋值操作符,单目操作符,关系操作符

"abc"=="acbdef",是不行的,这里比较的是两个字符串的首字符地址。printf("%d",~a) 1111....1111(这是补码)strcmp("abc","acbdef")==0 若相等则判断为0。如果要修改二进制中的0,变成1,可以让1左右移,使用移位操作符。位操作符("&"按位与,"|"按位货,"^"按位异或)都是按二进制,他们的操作数必须是整数,不能用于浮点数。"++"和"--"(使用方法是一样的,这里说++)a+b,双目操作符,"+"操作符有两个操作数。

2024-04-24 20:25:06 298

原创 算术操作符和移位操作符

右移操作符(①算术移位:右边丢弃,左边补原符号位 ②逻辑移位:右边丢弃,左边补0。注意:对于移位运算符,不要移动负数位(>>-1,<<-1),这个是标准未定义的。反码:11111.......11000(除了符号位不变,其他位与原码相反)第一位是符号位,符号位是0为正数,是1为负数。% 计算的是整除后的余数,两端必须是整数。整数的二进制表示有三种:原码 反码 补码。整数在内存中存储的是补码,输出的是原码。负的整数的原码,反码,补码是要计算的。正的整数的原码,反码,补码是相同的。

2024-04-23 21:01:34 417

原创 数组名首元素地址?

1.sizeof(数组名),这里的数组名表示整个数组,计算的是整个数组的大小,单位是字节。//加的是整个数组的大小。2.&数组名这里的数组名表示整个数组,取出的是整个数组的地址。arr//二维数组的数组名也表示数组首元素的地址。sizeof(arr)//是48个字节。这里首元素地址表示的是首行的地址。数组名确实能表示首元素的地址。1 2 3 4 //首行。

2024-04-21 18:45:05 213

原创 数组作为函数参数和冒泡排序法

一趟冒泡排序让一个数据来到它最终应该出现的位置上。注意:数组传参直接用数组名就行,不用带上[]例:实现一个冒泡排序(这里要讲算法思想)函数。冒泡排序的核心思想是:两个相邻的元素进行比较。在写代码的时候,会讲将数组作为参数传给函数。1.数组(显示的更直观一些) 2.指针。

2024-04-21 18:43:35 103

原创 二维数组和数组越界

c语言本身是不做数组下标的越界检查,编译器也不一定报错,但是编译器不报错并不意味着程序就是正确的。(要自己做越界检查)所以数组的下标如果小于0或者大于n-1,就是数组越界访问了,超出了数组合法空间的访问。int arr[3][4]={{1,2},{3,4},{5,6}} (可以进行分组)数组的下规定是从0开始的,如果数组有n个元素,最后一个元素的下标就是n-1。(若访问小于0或者大于n-1的值,那些值是随机的)可以把二维数组理解为:一维数组的数组。二维数组的创建,什么是二维数组。数组的下标是有范围限制的。

2024-04-21 18:42:07 298

原创 数组的初始化,一维数组

char ch2[10]="abc" 字符串默认后面有\0。"[]",下标引用操作符,它其实就数组访问的操作符。总结:1.数组是使用下标来访问的,下标是从0开始的。这是一个不完全初始化数组,剩余元素默认初始化为0。2.数组的大小可以通过计算得到的。随着数组下标的增长,元素的地址也在规律的递增。一维数组的使用,数组在内存中的存储。"%p",&arr[i] 打印地址。结论:数组在内存中是连续存放的。

2024-04-21 18:40:37 124

原创 一些小练习

2.计算1/1-1/2+1/3-1/4+1/5-1/6....+1/99-1/100的值。5.实现一个函数,打印乘法口诀,口诀表的行数和列数自己指定。%2d 打印两位,没有两位用空格填充,右对齐。1.求两个数的最大公约数(辗转相除法)3.在屏幕上输出9*9乘法口诀。4.找10个整数的最大值。

2024-04-19 20:05:40 270

原创 函数的递归

因为输入的是1234,程序运行至if语句看到print,那么,print又会执行一次自定义函数,将1234/10,得到123,123又会执行if语句,看到print,那么,print又会执行一次自定义函数,将123/10,得到12,就这样循环下去,直至1<9出if语句,才执行输出,得到1,往回走,得到2,再得3,最后得4,这样便按顺序输出了。一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略。

2024-04-18 21:30:12 380

原创 函数的声明和定义

函数声明:1.告诉编译器有一个函数叫什么,参数是什么,返回类型是什么。但是具体是不是存在,函数声明决定不了。2.函数的声明一般出现在函数的使用之前。要满足先声明后使用。函数定义:函数的定义是指函数的具体实现,交待函数的功能实现。3.函数的声明一般要放在头文件中的。

2024-04-18 21:25:32 129

原创 函数嵌套和链式访问

链式访问,依赖函数的返回值,作为其他函数的参数。函数可以嵌套使用,但是不能嵌套定义。

2024-04-17 17:38:09 197

原创 写一个函数,每调用一次这个函数,就会将num的值增加1

2024-04-17 17:34:31 118

原创 判断一年是不是闰年(利用自定义函数)

其实分开来写,意义表示的非常明确,这里做出判断,那里进行输出。1.能被4整除,并且不能被100整除。(&&)表示且,(||)表示或。2.能被400整除。

2024-04-16 16:43:26 457

原创 判断一个数是不是素数(利用自定义函数)

1.素数就是只能被1和本身整除的数(常规写)sqrt可以对double类型数字开平方。

2024-04-16 16:39:10 399

原创 函数的参数和调用(笔记)

2.形式参数(形参):形式参数是指函数名后括号中的变量,因为形式参数只有在函数被调用的过程中才实例化(分配内存单元),所以叫形式参数。形式参数当函数调用完成之后就自动销毁了。因此形式参数只在函数中有效。无论实参是何种类型的量,在进行函数调用时,他们都必须有确定的值,以便把这些值传给形参。1.实际参数(实参):真实传给函数的参数,叫实参。形式参数和实际参数的名字可以相同,也可以不同。实参可以是:常量,变量,表达式,函数等。

2024-04-15 10:22:27 120

原创 猜数字游戏源码

/形成真真的随机数,使用到srand函数,详解在笔记中。//生成随机数,rand函数生成随机数,但是每次程序运行时随机数都是一样的。printf("选择错误,请重新选择\n");printf("退出游戏\n");//模上100+1,取余就能得到1~100之间的数。printf("猜小了\n");printf("猜大了\n");printf("猜对了\n");printf("请选择:");printf("请猜数字:");

2024-04-15 09:58:02 261

原创 自定义函数

/当实参传递给形参的时候,形参是实参的一份拷贝,对形参的修改不会影响实参。例:比较两个数的大小(返回是整型,所以返回时要给予返回类型int)和库函数一样,有函数名,返回值类型和函数参数。

2024-04-14 20:41:56 210

原创 函数(笔记)

IO函数*字符串操作函数*字符操作函数*内存操作函数*时间/日期函数*数学函数*其他库函数。strcpy(arr1,arr2) 将arr2拷贝到arr1。若是想要改变后面的world ,只需要arr+6即可。看库函数可以上:www.cplusplus.com。输出后的结果是 hello yyyld。结果是 xxxxx world。6.函数的嵌套调用和链式访问。例:库函数strcpy 拷贝。1.库函数 2.自定义函数。库函数memset 替换。7.函数的声明和定义。

2024-04-14 20:36:33 128

原创 goto语句(本人练习片段,有些许错误)

但是某些场合下,goto语句还是用的着,最常见的用法就是终止程序在某些深度嵌套的结果的处理过程。printf("注意,你的电脑将在60秒后关机,如果输入:我是猪,取消关机");goto语句,从理论上是没有必要的,实践中没有goto语句也可以很容易写出代码。在电脑CMD命令框中,输入shutdown -s -t 60。if(strcmp(arr,"我是猪")==0)所以在c中,可以用system函数。输入shutdown -a。表示将在60秒后关机。

2024-04-13 20:53:23 200

原创 做一个猜数字小游戏(有点错误,需改正)

在整个编写游戏过程中,主要的是要理解其中逻辑(游戏界面,选择游戏开始或结束)(游戏内容,需要随机一个数字,需要玩家输入一个数字,与之比较,若相同则,答对,若不同则,输出与之大或者小)但是单独使用该函数,每当重新运行程序时,随机数都是一样的,所以我们需要用到srand()函数,()内的数如果是固定的,则随机数是相同的。把time()的返回值传递给srand,这是一个指针类型,要不去用到这个参数,可以传递一个空指针,time(NULL)不是每一次生成随机数都需要srand(),所以可以直接放到主函数中。

2024-04-13 20:40:51 120

原创 一些小练习(请指教)

3.在一个有序数组中查找具体的某个数字n(二分算法查找,简单来讲,就是一列数字找寻中间值,通过中间那个数与需要的那个数进行比较,从而抛弃或左或右两边的数,若中间值比需要数小则抛弃左边的数,若中间值比需要数大则抛弃右边的数,以此类推,从而查找到需要的数)1.计算n的阶乘(思维:首先得有三个变量,循环中的初始变量,输入的变量,结果变量,初始变量随输入变量改变,累计相乘)+......+10!(思维:通过循环累计相乘后,累计相加)为了防止溢出,可以写成:left+(right-left)/2。

2024-04-12 14:39:37 400

原创 零碎笔记(求指教)

可以使用小写字母,大写字母,数字和下划线_ 来命名,名称的第一个字符必须是字母或者下划线,不能是数字,大小写也要区分。在比较两个字符串是否相等时,不能使用"==",而应该使用一个库函数:strcmp,如果返回值是0,表示2个字符串相等。4.当屏幕上出现太多,不好看时,需要清空时,可以采用system函数,system是一个库函数,在使用该函数时需引入头文件#include<stdlib.h>5.需要注意的是:数组名本来就是地址,所以在输入时,并不用取地址,使用&。所以在c中,可以用system函数。

2024-04-12 14:31:30 412

原创 do...while循环,零碎笔记

至少循环一次,不论是多条语句还是单条语句(习惯写,把{}带上)continue 同样也可用于在do while循环中。break 同样也可用于在do while循环中。while(表达式);

2024-04-11 18:05:06 111

原创 关于for循环,零碎笔记

在while循环中,continue会跳到判断部分去,在for循环中,continue会跳到调整部分去。for循环中的初试化部分,判断部分,调整部分是可以省略的,但是不建议初学省,容易导致问题。continue可以用在for循环中,跳过本次循环后面代码,进行下一次循环。一些建议:1.不可在for循环体内修改循环变量,防止for循环失去控制。表达式2 为条件判断部分,用于判断循环时候终止。表达式1 为初始化部分,用于初始化循环变量。表达式3 为调整部分,用于循环条件的调整。"="为赋值 "=="为判断。

2024-04-11 18:03:07 155

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除