c语言
qq_44842466
这个作者很懒,什么都没留下…
展开
-
C++知识
C++ 待整理知识原创 2022-10-12 18:13:34 · 350 阅读 · 1 评论 -
c语言细节
(1)有符号数和无符号数运算,统一转换为无符号数:原创 2021-08-05 22:10:29 · 75 阅读 · 0 评论 -
c语言 强制类型转换和printf(“%d“,);里面格式化输出控制符的区别
挖一个坑。探讨一下怎么把一个浮点数的32位给打印出来。对float类型是不允许位运算的,我看别人是把这个float的地址转换成一个int*类型,然后对这个int指针指向的数据进行位运算,感觉有点东西可以学习一下。...原创 2020-11-25 21:46:22 · 712 阅读 · 1 评论 -
联合体和结构体内存对齐规则
联合体转载自这里 当多个数据需要共享内存或者多个数据每次只取其一时,可以利用联合体(union)。在C Programming Language 一书中对于联合体是这么描述的: 1)联合体是一个结构; 2)它的所有成员相对于基地址的偏移量都为0; 3)此结构空间要大到足够容纳最"宽"的成员; &nbs原创 2020-11-25 21:02:09 · 2628 阅读 · 0 评论 -
typedef
typedef也来一个链接看看转载 2020-11-25 15:36:36 · 79 阅读 · 0 评论 -
数组名和二级指针分别作实参和形参: 强化学习指针
在做leetcode的时候常会传进来一个二维数组,一般都是以二级指针的形式。这里提一嘴做leetcode二维数组题时很多萌新都不知道最后两个形参是干什么的:returnSize:指返回的二维数组的行数,真正需要的是一个int值,这里通过地址传递来实现被调函数向主调函数传输多个数据。我们直接*returnSize=i就行了。returnColumnSizes:指返回的二维数组的每一行的列数,真正需要的是一个int数组,这里通过地址传递来实现被调函数向主调函数传输多个数据。我们直接创建一个int数组,.原创 2020-11-25 00:08:26 · 312 阅读 · 0 评论 -
c语言目前不懂的知识点
1.为什么数组的大小必须是常量,在编译时分配内存怎么理解?2.在编译时怎么识别没有某个方法,有方法表吗?为什么在函数定义之前不能调用?为什么声明之后又可以了?3.强制类型转换:为什么struct a不能强转为struct b,而指针类型可以强制转换为整型(long、int、short)和char类型?更新中,有知道得大佬路过可以指点一下。...原创 2020-11-24 22:08:58 · 115 阅读 · 0 评论 -
记录一下格式:指针数组/指向数组的指针/指向函数的指针
其中小括号里的[3]和形参表可以放到小括号的后面,我习惯放里面。可以看出分为3段,第一段是数组或者函数的类型,第二段是变量名,如果是指针要在变量名前面加*并用小括号括起来,第三部分是数组大小或者函数形参表。...原创 2020-11-24 17:53:56 · 84 阅读 · 0 评论 -
qsort的compare函数/通过对二维数组排序来理解指针
qsort(a,1000,sizeof(int)*2, comp); int comp(const void*a, const void*b) { return((int*)a)[0]-((int*)b)[0];}如上代码,现在我们有一个int a[1000][2];用上面的comp函数可以实现对这个二维数组以a[i][0]的大小为依据从小到大排序。让我们来分析一下为什么。首先comp的参数是指向数组元素的指针,至于是怎么判断这两个元素一个比基准元素大,一个比基准元素小,我们就不得而知了,然后原创 2020-11-23 23:53:56 · 447 阅读 · 0 评论 -
声明一个函数,extern一个变量的意义,编译器编译到这一行到底发生了什么
as we know,在main方法后面的函数和变量我们是访问不到的。让我们为这奇妙的机制编一个合适的理由,毕竟我很喜欢这样做。让我们对比java:在执行java的main方法之前,我们会加载main方法所在的类,然后你在main方法里调用该类别的静态方法时,虚拟机会去该类的方法表里查找签名相同的方法(签名只和方法的名字和参数个数、类型有关,和方法的返回值类型,作用域类型无关,如图:),再多说一嘴,对于静态方法,编译器在编译.java文件的时候已经能知道要去哪里拿这个方法了,但是有没有把这个方法的原创 2020-11-18 22:19:51 · 130 阅读 · 0 评论 -
漫谈补码
当想到补码,我们会自然的说它是一种负数的表示方法,从而可以把减法计算变为加法计算。要是问一个问题:补码为什么可以把减法计算变为加法计算?要解答这个问题似乎可以这样理解:4 + -4 = 04的补码 + -4的补码 = 0的补码 第一行我们小学生都会,第二行是我们计算机人都要记住的东西。那我问屏幕前的小朋友你一个问题,4的补码是对4的映射吗?如果是的话:f(3) + f(4) = f(7)你觉得上面一行有问题吗?比如要是f(x)=x+1的话,等式左边是9,右边是8。显然是不成立的,一个原码只对应原创 2020-09-18 23:12:27 · 89 阅读 · 0 评论 -
用不同进制的写法给变量赋值
听说用十六进制给变量赋值会作为数据的补码形式,于是我试了一下发现是真的:规定是这样那就记住吧。原创 2020-09-17 13:25:19 · 250 阅读 · 1 评论 -
基本数据类型的四种情况下的隐式转换 你知道了嘛?
1、隐式转换C在以下四种情况下会进行隐式转换:1、算术运算式中,低类型能够转换为高类型。2、赋值表达式中,右边表达式的值自动隐式转换为左边变量的类型,并赋值给他。3、函数调用中参数传递时,系统隐式地将实参转换为形参的类型后,赋给形参。4、函数有返回值时,系统将隐式地将返回表达式类型转换为返回值类型,赋值给调用函数。2、算数运算的隐式转换算数运算中,首先有如下类型转换规则:1、字符必须先转换为整数(C语言规定字符类型数据和整型数据之间可以通用) 。2、short型转换为int型(同属于整型)原创 2020-05-26 17:06:06 · 4213 阅读 · 0 评论 -
原码、反码、补码和-2147483648的补码表示
在网上看到一个挺奇怪的说法:一个整数的原码是这个数的绝对值的源码,然后他就得出了00000000 00000000 00000000 00000101 是 5的 原码然后他又说反码就是32位的每一位都取反比如:将00000000 00000000 00000000 00000101每一位取反,得11111111 11111111 11111111 11111010。称:11111111 11111111 11111111 11111010 是 00000000 00000000 0000000原创 2020-05-25 17:46:22 · 2156 阅读 · 0 评论 -
左值和右值
多说则错,小菜鸡粗略总结一下:单目运算符的操作数大部分是左值,如&,sizeof。赋值运算符的左边是左值,右边是右值。左值是变量,但不是临时变量(应该讲临时对象,如a+b不需要一个变量名表示他),左值既能知道它的地址,也能改变它的值。已经声明的变量都是左值int a=3,b=4;5=a; //常量不行a+b=5; //临时变量不行int *c=&a; &(&...原创 2020-04-17 17:58:25 · 424 阅读 · 0 评论