- 博客(13)
- 收藏
- 关注
原创 12补.函数指针
/add和&add是等价的,所以add(1,2)和p(1,2)是一样的。和解引用也是等价的。// //需要定义一个指针变量,这个变量可以保存函数的地址(函数指针)// //int (*p)[] 数组指针,可以说类似吧。直接打印函数和打印函数的地址是一样的。
2026-01-06 17:42:37
171
原创 12.c语言指针高阶
/或者*(arr + i);//都是一样的意思。你品吧。int b = 20;int c = 30;return 0;注意注意注意:int* tmp =arr[i];//或者*(arr + i).这里不要写成&arr[i]。因为你定义的是指针数组里面的元素已经是地址了就不要不要不要再取一次地址。
2026-01-04 22:31:01
411
原创 11.c语言指针进阶
虽然str是指针,但是strlen的参数要求就是const char*.strlen接收一个指向字符串首字符的指针,然后从该地址开始逐个遍历字符,直到遇到\0结束,统计字符串里面字符的个数。为什么strlen后面的括号里可以直接装str,输出的结果也是5,str现在不是指针变量吗,里头的内容不是地址吗。的左边,修饰的是指针指向的内容,保证指针指向的内容不能通过指针来改变。的右边,修饰的是指针变量本身,保证了指针变量的内容不能修改,但是指针指向的内容,可以通过指针改变。//输出的个数不包含\0,是5。
2026-01-02 19:09:33
711
原创 10.c语言指针初阶
p+1是一个地址,这里的加1相当于加了四个字节,从数组下标为0的位置加到了数组下标为1的位置。用%p输出的是地址。在32位系统下,一个4字节的指针,用十六进制表示就是一个八位的十六进制数。sizeof(arr)这时候计算的是指针变量的字节大小,64位系统下占8字节,32位系统下占4字节。记得占位符用原来变量的,是int就用d,是char就用c,不要用p了。不能直接换指针的地址变量的,换的是里面装的东西。此时的形参只是拿到了实参的值,形参只是实参的一份拷贝。结果是3,刚好是两个数在数组里,中间隔的数的个数。
2026-01-01 23:19:17
634
原创 9.c语言递归详解
重点:终止条件很关键。弄错了或者没弄会导致栈溢出。他说起始条件就是终止条件,我再看看吧。思路:起始条件=终止条件,n=1.sum(n) = n + sum(n - 1)递归的过程中,递和归是两个动词。既要递,又要终止条件来归。面试的时候不要用递归来写斐波那契。重复计算,效率变低。他说,后续的二叉树,还有一些算法,都要用到递归。思路:%10,/10 这个是逆序的,你见过的吧。所以n == 1非常重要,是终止条件。顺序很重要,研究你自己的程序去。例:用递归写N的阶乘。顺序就是倒过来用递归。
2026-01-01 17:24:48
261
原创 88888888.调试
Debug(调试版本): 它包含调试信息,并且不作任何优化,便于程序员调试程序;程序员在写代码的时候,需要经常性的调试代码,就将这里设置为debug,这样编译产生的是debug版本的可执行程序,其中包含调试信息,是可以直接调试的。Release(发布版本): 它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用。
2025-12-30 22:47:58
256
原创 7.C语言函数
ret_type fun_name(形式参数)//函数体ret_type是函数返回类型 得到的结果的类型 容器的类型fun_name是函数名括号里放的是形式参数 完成功能需要的必要的数据{}括起来的是函数体 整个功能的核心 所做的动作功能:计算两个整数相加return sum;或者void//void的意思是无返回值类型,这样可以不用写return sum,写printf。功能:求一个整数n的阶乘。i <= n;return ret;或者。
2025-12-30 21:46:38
669
1
原创 4444。c语言逻辑控制详解。
+a的结果是2,非0,为真,所以if后的表达式为真,会输出冬季。for循环的执行顺序,第一次是表达式1,表达式2,循环体,表达式3。之后就是表达式2,循环体,表达式3,表达式1就没了,只用于变量的初始化。所以i到了5之后,就永远不会执行到i = i + 1那里了,永远都是5了,绕进去了。是执行顺序没有理解好的问题。原因是定义的变量类型是字符,空格和回车也是字符,就把空格和回车赋进b里去了,输入的那个b就相当于没用。表达式1用于循环条件初始化,表达式2用于循环结束时条件的判断,表达式3用于循环变量的调整。
2025-12-13 17:23:06
836
原创 3。运算符
反码是1111 1101,原码1000 0010,十进制数是-2。-5补码1111 1011 >>1 1111 1101(补码)——>1111 1100(反码)——>1000 0011(原码)-3。-1补码1111 1111 >>1 1111 1111 -1是特殊的,移完之后还是-1。0000 1010 >>2 0000 0010(2) 相当于10/2^2。//输出的结果是1.5。思路:1^1=0 2^2=0 0^3=3——>1^2^3^2^1=3。符号位是0就补0,是1就补1。
2025-12-06 17:00:43
597
原创 222222。
能表示的最大负数 1111 1111(补码)(因为内存里存的是补码)——原码1000 0001—— -1,最小负数 1000 0000(补码)——反码0111 1111——原码1000 0000 -0?意思是9.9在c语言里默认是用double的,但是现在用的是float。比如上面这个程序,如果输入1 2,输出的结果就会是1,-858993460。就是个怪玩意是错的。因为你的格式是无符号的,而且它又是负数,符号位上的1,就会被当成是数值计算。2(就是在输入的时候中间加上一个空格),是可以正常输出1,2的。
2025-12-02 20:54:08
742
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅