
c语言新手学习中
文章平均质量分 52
知兀
这个作者很懒,什么都没留下…
展开
-
结构体的学习
函数传参时,参数是需要压栈的。如果传递一个结构体对象时,结构体过大,参数压栈的系统开销比较大,所以会导致性能下降(形参是实参的一份临时拷贝)结构体传参时,要传结构体的地址。原创 2024-09-19 13:18:02 · 169 阅读 · 0 评论 -
任何一个变量/表达式,都有2个属性
让 a + 0.14,0.14 是 double 类型的(默认),a 是整型,int 算术转换成 double 类型的值。上文中,a + 0.14这个表达式,int 加上 double 算术转换了,但如果是赋值就不会。这里,sum 是整型,i 是 double 类型,但是最后的 sum 还是整型。因为在这里 i + sum 之后,又放进了 int 类型的 sum 之中。(好比把 2 米的棍子放进 1 米的空间,截断都要塞进去)值属性:a 的那个真实的地址。&a 的类型属性:int*类型属性:double。原创 2024-09-07 18:59:14 · 267 阅读 · 0 评论 -
因高低地址而造成的,越界访问后的死循环
如果 i 和 arr 之间有适当的空间 ,利用数组的越界操作就可能会覆盖的 i ,就可能会导致死循环的出现。原创 2024-09-07 13:01:06 · 248 阅读 · 0 评论 -
全局变量不初始化,默认会被初始化位为0
算术转换是向上转换的,如 int 类型和 unsigned int 类型一起,int 转换成 unsigned int。算数转换:如果某个操作数属于不同类型,那么其中一个操作数转换为另一个操作数的类型。因为sizeof操作符的返回值类型是size_t类型, 是无符号整型的。所以 int 类型的 i 也被转换成了 unsigned int 类型。sizeof 这个操作符计算返回的结果是size_t类型的,是。首先,i 是全局变量,没有给出初始化的数值,默认初始化为0。sizeof (i) 返回 4。原创 2024-09-06 16:12:23 · 769 阅读 · 0 评论 -
写一个函数返回参数二进制中1的个数
只需传数时,传入无符号数,那么就会将-1的11111111111111111111111111111111看作是非常大的正数。每次二进制位最右边的数变成0,后面的是借位变成1,这样才是-1。这个代码对给出的正负数,都可以计算二进制中的1的个数。变成:1011(2⁰ + 2¹ + 2³ = 11)通过数字的补码的右移 i 位,遍历了所有的二进制位。比如:1100(2² + 2³ = 12)然后&1,看最后1个二进制位是否为1。所以,-1的二进制中应该有32个1。当输入-1时,结果为0。执行1次,去掉一个1。原创 2024-09-06 11:23:47 · 358 阅读 · 1 评论