- 博客(11)
- 收藏
- 关注
原创 怎么去理解C语言的复杂声明
要理解其声明,首先要了解其优先级规则,C语言声明优先级规则如下:声明从它的名字开始读取,然后按优先级顺序依次读取2)优先级从高到底依次是:2.1)被括号括起来的部分2.2)后缀操作符()括号表示一个函数[ ] 中表示一个数组2.3)前缀操作符* 星号表示“指向…的指针”3)const volatile关键字如果其后紧跟着类型说明符,那么它作用于类型说明符其他情况下,其作用于左边紧邻的星号指针总结来说,从名字开始,先看后面再看前面,依次是:()、后缀、前缀,作用于紧挨着的。
2020-12-13 00:04:12
134
原创 C 操作符结合性
操作符结合性用于同一表达式中出现几个相同优先级操作符。所有赋值操作符都具有右结合性,也就是先执行右边的,再执行左边的,从右往左依次执行。例如:int a, b = 1, c = 2;a=b=c;会先执行b=c,再执行a=b,最后a的值是2;具有左结合性的操作符,从左往右依次执行。(例如’ &’ 和 ‘|’)...
2020-11-16 23:18:29
165
原创 C语言 表达式计算次序
C语言里,优先级和结合性规则告诉我们哪些符号组成一个意群,同时这些意群内部如何进行计算的次序始终未定义。在表达式:x = f() + g() * h();g() 和 h() 组成一个意群进行乘法运算,单两者的调用可能以任何顺序次序出现。同理f()调用,可能在乘法之前,也可能在乘法之后,也可能在g() 和 h()调用之间。唯一可以确定的是乘法在加法之前进行。之所以未定义是想让编译器利用自身架构特点,或者充分利用寄存器中的值。有专家建议,在C语言里记住 乘法先于加法和减法,涉及其他操作符时一律加上括号,加
2020-11-16 22:45:35
728
原创 C 语言的 符号重载
即同一个符号,在不同的上下文环境里有不同的意义。static在函数内部,表示变量在各个调用间保持延续性在函数这一级,表示该函数只对本文件可见extern用于函数定义,表示函数全局可见(默认情况下是这种情况)用于变量,表示变量在其他地方定义void用于函数返回类型,表示不返回任何值用于指针声明,表示通用指针类型用于参数列表,表示没有参数...
2020-10-28 11:42:49
161
原创 C语言中的 const
1.在C语言中,const 关键字并不真正表示常量例如:#include <stdio.h> int main(){ int const c = 2; int a = 0; switch(a) { case 1: break; case c: break; default: break; } return 0;}这里会报编译错误[Error] case label does not reduce to an integer constant
2020-10-26 11:02:56
170
原创 C语言 一个‘L’的NUL 和两个‘L’的NULL 的区别
一个‘L’的NUL,用于表示ASCII字符串结束,相当于’\0’两个‘L’的NULL,用于表示什么也不指向(空指针)
2020-10-25 11:02:42
186
原创 平面内 两直线/两向量的夹角方向 逆时针 还是顺时针
判断两向量的夹角方向,用向量叉乘来判断假设有两向量(v1x,v1y), (v2x, v2y)坐标系是右手坐标系,0点在屏幕左下方,往右是x正方向,往上是y正方向角度逆时针为正,顺时针为负从v1 到 v2的夹角是顺时针还是逆时针,将向量做叉乘v1 x v2,如果结果大于0,则v1到v2是逆时针;如果结果小于0,则v1到v2是顺时针方向;结果为0则两向量共线direc = v1xv2y - v1yv2x;if(direc > 0){顺时针方向}else{逆时针方向}...
2020-10-10 10:18:50
1864
原创 数学 平面内 两直线 两个向量的夹角计算公式 C++实现
数学 平面内 两个向量的夹角计算公式 C++实现double VectorAngle(double v1x, double v1y, double v2x, double v2y){ double ret = 0.0; double l1, l2; double err = 0.00001; l1 = sqrt(v1x * v1x + v1y * v1y); l2 = sqrt(v2x * v2x + v2y * v2y); if((l1 > err) &&
2020-09-29 17:18:11
2495
原创 ROS 开发 roll pitch yaw欧拉角计算四元素 x y z w C++实现
ROS 开发 通过欧拉角计算四元素 C++实现void GetXYZWFromRPY(double roll, double pitch, double yaw, double& x, double& y, double& z, double& w){ roll /= 2; pitch /= 2; yaw /= 2; x = sin(roll) * cos(pitch) * cos(yaw) - cos(roll) * sin(pitch) * sin(y
2020-09-29 17:15:20
1354
原创 ROS x y z w四元素转欧拉角 roll pitch yaw C++实现
ROS roll pitch yaw 欧拉角转四元素 C++实现void GetRPYFromXYZW(double x, double y, double z, double w, double& roll, double& pitch, double& yaw){ roll = atan2(2 * (w * x + y * z), 1 - 2 * (x * x + y * y)); pitch = asin(2 * (w * y - z * x)); yaw =
2020-09-29 17:12:51
1261
原创 C 经典统计整数二进制中1的个数算法
int fun(int x){ int countx = 0; while (x) { countx++; x = x & (x – 1); } return countx;}基本原理是:从右边起假设x的k位为1,其后面全是0,那么x-1的k位则为0,x&(x-1)后,k和k以后的所有位均变为0...
2020-03-11 09:39:29
206
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人