C/C++
袁保康
.
展开
-
C语言与javascript的不同之处
C语言与javascript的不同之处介绍最近会把一些C语言的小程序,小算法移植到js中,这里简单记录一下两种语言的不同之处。数据类型C语言中有int,char,float等等,而js中只有let(先忽略var),所以转换过程中遇到C语言中的数据类型要换成let。除法C语言中常用一种除法整除取整比如int a = 5/2;结果就是2。而在js中这样计算默认会变成...原创 2018-08-29 10:42:38 · 2916 阅读 · 0 评论 -
memcpy的8位,16位,32位分别实现
今天面试碰到一道题,大致意思是: memcpy的原型是void *my_memcpy(void *dst, void* src, int size) ,请分别用 8位,16位,32位分别实现。8位当然很简单了。然后也想到了这个参数 dst,src的指针返回时是原值,所以里面要用一个临时指针去算。 16和32 的时候,最后 余下来的部分还是要 按 8位来拷贝的,但是 这样的话16和32位转载 2013-05-13 21:30:55 · 5511 阅读 · 0 评论 -
c语言按位反转、二进制输出函数
#include//bit_reverse:32位数按位反转函数// 作用:把一个32位整数按位反转,即第1位转到第32位,第2位转到第31位,依次下去。//算法实现:第一行代码为奇偶位相互交换;第二行为以两位为一单元,奇偶单元进行交换;第三行为以四位为一单元,奇偶单元进行交换;第四行为以八位为一单元,奇偶单元进行交换;最后一行为以十六位为一单元,奇偶单元进行交换。至此,32位转载 2013-05-13 22:10:25 · 3543 阅读 · 0 评论 -
定义结构体时变量名后的冒号和数字
如下: [cpp] view plaincopystruct frame_control { u_char fc_subtype : 4; u_char fc_type : 2; u_char fc_protocol_version : 2; u_char fc_order : 1转载 2013-05-13 22:33:41 · 1658 阅读 · 0 评论 -
union中嵌套struct
遇到这样一个面试题目,让说出u.d的值。#include #define u_char unsigned chartypedef union U{ struct { char a : 8; char b : 8; char c : 8; char d : 8; }s; int d;}U;int main(){ U u; u.d = 0; u.s原创 2013-05-13 23:10:09 · 4703 阅读 · 0 评论 -
数组名a 作为 左值和 右值的区别
比如:x=y左值:在这个上下文环境中,编译器认为x的含义是x所代表的地址。这个地址只有编译器知道,在编译的时候确定,编译器在一个特定的区域保存这个地址,我们完全不必考虑这个地址保存在哪里。右值:在这个上下文环境中,编译器认为y的含义是y所代表的地址里面的内容。这个内容是什么,只有到运行时才知道。C语言引入一个术语——“可修改的左值”。意思就是,出现在赋值符左边的符号转载 2013-05-25 09:41:14 · 4307 阅读 · 2 评论 -
收集C语言中经典有参宏定义
收集C语言中经典有参宏定义1. malloc #define MALLOC(type, n) (type*)malloc(n*sizeof(type)) e.g: int *p = MALLOC(int, 5);2. 两个变量值交换swap #define SWAP(a, b) (a^=b^=a^=b)原创 2013-05-17 09:11:39 · 1600 阅读 · 0 评论 -
C语言编译指示字#error #warning #line
#include int main(){#line 1 "kangear"#ifndef COM#error not COM def#endif printf("Hello world\n"); return 0;}是在预处理的时候,打断的。原创 2013-05-18 13:04:19 · 1397 阅读 · 0 评论 -
单步编译helloworld程序
再看这个图的时候,有就一个种一定要能从A-》B-》C-》D单步编译出来。这么一个程序:#include int main(){ printf("Hello world!\n"); return 0;}1.预处理cpp hello.c - o hello.i2.编译gcc -E hello.i -o hello.原创 2013-05-24 12:27:10 · 1295 阅读 · 0 评论 -
const遇到指针后就彻底瓦解了
1.const修饰变量正常不能改变:#include int main(){ const int a = 1; a = 2; //报错 printf("%d\n", a); return 0;}用指针后可以改变:#include int main(){ const in原创 2013-05-23 11:44:13 · 1085 阅读 · 0 评论 -
C语言中用柔性数组实现斐波那契数列
一个柔性数组使用实例:#include #include typedef struct _soft_array{ int len; int array[];}SoftArray;int main(){ int i = 0; SoftArray* sa = (SoftArray*)malloc(sizeof(SoftArray) + sizeo原创 2013-05-23 18:52:15 · 3061 阅读 · 0 评论 -
void指针和memset实现
1.void指针2.实现memsetvoid* my_memset(void* p, char v, int size){ void* ret = p; char* dest = (char*)p;//一定养成习惯强制转换 int i = 0; for(i=0; i<size; i++) { dest[i] = v; } return r原创 2013-05-23 09:46:35 · 1789 阅读 · 0 评论 -
C语言一些面试题-1
1.请阅读下面的程序,理解程序的意图并找出程序中的错误改正。main(){ char*src="hello,world"; char* dest=NULL; int len=strlen(src); dest=(char*)malloc(len); char* d = dest;原创 2013-05-22 22:25:41 · 1345 阅读 · 0 评论 -
static修饰的局部变量
static修饰的局部变量说明:实验:所以我觉得,static修饰的局部变量不是调用这个函数时候才进行的初始化,在程序一运行就进行了初始化。原创 2013-05-22 15:23:55 · 1686 阅读 · 0 评论 -
C语言中的BOOL变量
#include /* * 定义一个布尔变量 * 在C99以后才有正规的布尔变量 * 很多编译器默认不是C99的,所以 * 为了保证程序的可移植性,要自己 * 定义BOOL变量 */typedef enum _bool{ FALSE = 0, TRUE = 1}BOOL;int main(){ BOOL b = TRUE; if(b) //不要这样if(b ==原创 2013-05-22 15:47:06 · 3825 阅读 · 0 评论 -
多文件使用全局变量时extern的规范用法
关键字extern用来声明变量或者函数是一个外部变量或者外部函数,也就是说告诉编译器是在其他文件中定义的,编译的时候不要报错,在链接的时候按照字符串寻址可以找到这个变量或者函数。(函数默认是外部类型的,不需要显示声明,但是变量必须,如果想把一个函数声明为只在本文件范围有效,那么可以用static来说明) 在某个头文件,比如A.h中定义了全局变量比如int a;,那么在其他文件中的转载 2013-05-14 17:58:45 · 3530 阅读 · 0 评论 -
C语言运算符优先级 详细列表
文章作者:姜南(Slyar) 文章来源:Slyar Home (www.slyar.com) 转载请注明,谢谢合作。恩,问这个问题的人太多了,懒得继续回答,直接贴上来自己看。。。优先级运算符名称或含义使用形式结合方向说明1[]数组下转载 2013-05-28 14:50:57 · 1443 阅读 · 0 评论 -
Linux tool: convert binary file to C/C++ source code array
FROM:https://falsinsoft.blogspot.com/2015/03/linux-tool-convert-binary-file-to-cc.htmlIn case you are programming under Linux and have a binary file that want “import” inside your C/C++ code is ther...转载 2018-08-28 17:46:54 · 722 阅读 · 0 评论 -
Linux中的currentTimeMillis
Java中的currentTimeMillis很好用,在Linux内核或者应用程序中封装了一下。内核中:long currentTimeMillis (void) { struct timeval tp; do_gettimeofday(&tp); return tp.tv_sec * 1000 + tp.tv_usec / 1000;}// 打印...原创 2018-03-06 16:22:25 · 1091 阅读 · 0 评论 -
Ubuntu 16.04 安装OpenCV
安装sudo apt-get install libopencv-dev libcv-devDemo这是一个获取图片的轮廓#include <iostream>#include <opencv2/opencv.hpp>using namespace std;using namespace cv;//声明使用的命名空间const char ...原创 2018-03-09 17:31:44 · 1003 阅读 · 0 评论 -
terminate called after throwing an instance of 'std::regex_error'
terminate called after throwing an instance of 'std::regex_error' what(): regex_errorAborted c++11代码编译时没有出现问题,运行时出来问题了。在PC上编译运行时还没有问题呢,在ARM上编译运行有上述问题了。网上查了一下,大概是g++版本的问题,PC上是使用的是5.4版本的G++,而ARM上使...原创 2018-02-22 11:30:19 · 2274 阅读 · 1 评论 -
C++实践:超级for循环以及list与java中的差异
在Java中的For循环中可以直接修改对象的属性import java.util.ArrayList;import java.util.List;import java.util.regex.*;public class main { static class Student { String name; int id; pu原创 2018-02-07 21:37:04 · 665 阅读 · 0 评论 -
Ubuntu 16.04 Eclipse 开发C++11程序之IDE配置
解决IDE提示错误: 来源:https://stackoverflow.com/a/24628502/2193455 这个可以解决C++11才支持的atoi,regex_search,smatch找不到的问题Type 'atoi' could not be resolvedType 'regex_search' could not be resolvedType 'smatch原创 2018-02-07 16:23:11 · 1002 阅读 · 0 评论 -
C++实践:正则表达式解析声卡参数
C++实践:正则表达式解析声卡参数在Java中的正则表达式使用的http://www.txt2re.com/直接生成的,而在C++中txt2re并没有使用C++11中自带的正则库,而是使用的别的库,这么一来,如果想使用C++11中自带的正则库就用不了txt2re了。凭着感觉硬吞下来了。C++11来解析声卡参数。[txt2re还是很好用的][1]。//====================原创 2018-02-06 23:07:50 · 410 阅读 · 0 评论 -
malloc calloc realloc使用模板
malloc使用模板:#include #include int main(){ int* p = (int*)malloc(5 * sizeof(int)); if (NULL != p) { //do something } free(p); p = NULL; return 0;}原创 2013-05-16 14:44:43 · 1998 阅读 · 0 评论 -
popen——C程序中获取Shell命令的输出
以前在C程序中习惯用system来调用执行shell命令,但是这样有个缺点,就是只能得到执行的shell命令的返回值,如果想得到其输出,只能通过一些间接的方法,比如修改shell命令让它的输出重定向到一文件中,然后c程序再从该文件获取。这样的缺点是需要磁盘操作,降低了程序的执行效率。如果用popen即可解决这个问题。#include FILE *popen(const char *cm转载 2014-02-19 14:34:46 · 3881 阅读 · 0 评论 -
printf 十六进制格式化输出 2字节对齐
每次看到人家的十六进制输出,对齐的很好,ff就显示了,而我的总是0xffffffff。如果是"%02x",是以0补齐2位数,如果超过2位就显示实际的数;"%hhx" 是只输出2位数,即便超了,也只显示低两位; 因此有了"%02hhx"点击(此处)折叠或打开void hexdump(char *buf, int num){.转载 2013-09-01 15:20:59 · 3978 阅读 · 0 评论 -
C中待解决的问题
1.C专题:函数递归与函数设计技巧 18:02 留的问题,目前还不完全明白题意。2.VC查看预处理文件 VC给封装了,看不到的!3.const修饰变量用指针去改值,在gcc 和 g++下会不一样4.const修饰数组在gcc g++下都 可以改变? 已发邮件给老师了5.用柔性数组实现斐波那契数列。(struct)6.在不同的内存对齐下结构体所占字节数?(提示GCC不支持8字原创 2012-12-27 09:53:38 · 895 阅读 · 0 评论 -
union判断大小端
union 型数据所占的空间等于其最大的成员所占的空间。对 union 型的成员的存取都是相对于该联合体基地址的偏移量为 0 处开始,也就是联合体的访问不论对哪个变量的存取都是从 union 的首地址位置开始。#include int main(){union check{int i;char ch;}c;c.i = 1;printf("%u\n原创 2013-05-15 08:45:11 · 1434 阅读 · 0 评论 -
struct和typedef struct
分三块来讲述:1 首先: 在C中定义一个结构体类型要用typedef: typedef struct Student { int a; }Stu;于是在声明变量的时候就可:Stu stu1;如果没有typedef就必须用struct Student stu1;来声明这里的Stu实际上就是s转载 2013-05-15 08:01:54 · 956 阅读 · 0 评论 -
代码证明volatile
说这个之前,应该先知道程序的“优化”,通过调试推断出volatile应该是出现在“优化”之后的,没有“优化”的话,volatile没有一点用。 C程序优化:编译器能做的,不让其在程序中做。#include int main(char argc, char**argv){ int obj = 10; int a = 0; int b = 0; a = obj; b =原创 2013-05-14 22:11:25 · 1174 阅读 · 0 评论 -
C语言中的函数类型和函数指针
#include #include void func1(){ printf("Func1 is runing...\n");} void func2(){ printf("Func2 is runing...\n");} void func3(){ printf("Func3 is runing...\n");} void func4()原创 2013-05-21 09:44:48 · 1664 阅读 · 0 评论 -
下标到指针之间和转换
以下的程序做了什么。#include int main(){ int a[3][3] = {{0, 1, 2}, {3, 4, 5}, {6, 7, 8}}; int i = 0; int j = 0; for(i = 0; i<3; i++) { for(j=0; j<3; j++) { printf("%d\n", *(*(a+i)+j)); }原创 2013-05-21 00:22:35 · 1119 阅读 · 0 评论 -
再说BSS段的清理
再说BSS段的清理 以前遇到一个裸机程序不能改变全局变量值的问题,最后迷迷糊糊解决了:手动添加了一个链接脚本,清理了BSS段。问题得以解决,就认定是BSS段清理的问题,全局变量在BSS段中。 但是现在看这个结论下的有点不全面。根据名著上说BSS段是放未初始化或者初始化为0的全局变量(经手动证实无误),我不想着有问题了。那么把这个功劳全归于BSS段的原创 2013-05-16 18:57:53 · 1874 阅读 · 0 评论 -
实例说明C语言中初始化和未初始化的全局变量所在不同的段
实例说明C语言中初始化和未初始化的全局变量所在不同的段一个程序:Makefile:objs := bss.oall: bssbss: $(objs) gcc -o bss_elf bss.c objdump -D bss_elf > bss.disclean: rm -f bss_elf bss.dis *.o 主程序:/* * bss.c原创 2013-05-16 17:55:56 · 3119 阅读 · 0 评论 -
不使用库函数将整数转换为字符串
不使用库函数将整数转换为字符串 在裸机调试初期,只实现putc。调试ADC时候想要打印出来。就要将整数转换为字符串,没有库函数,只能自己实现。网上找到一些代码,这里。 测试正数,负数都没有问题,就是0转化时没有转化。单步调试出是有一些不合适(将原来的while(temp)改为了do while语句)。改过后记录一下:void int2str(int nu原创 2013-04-12 22:58:53 · 1438 阅读 · 0 评论 -
用C语言语法分析pISR_EINT8_23=(U32)key_handler
/******************************************************************************************************************原文地址:说明:。******************************************************************原创 2013-01-28 21:51:47 · 8824 阅读 · 0 评论 -
C/C++头文件和库文件的区别和联系
/******************************************************************************************************************原文地址:http://blog.chinaunix.net/uid-26715658-id-3092503.html说明:以前 没有在意这个 库和头文件转载 2013-01-17 17:37:49 · 2659 阅读 · 0 评论 -
文件编程:create函数
例子:#include #include #include #include #include void create_file(char *filename){ if(creat(filename,0755)<0) { printf("create file %s failure!\n",filename); exit(EXIT_FAILURE); //EX原创 2013-01-11 19:39:15 · 1528 阅读 · 0 评论 -
高通原来是这样定义结构体的
高通原来是这样定义结构体的:#define STRUCT(type) typedef struct _tag_##type type;\struct _tag_##typeSTRUCT(Student){ char* name; int id;};今天算是见识了,完整例子如下:#include #define STRUCT(type) type原创 2012-12-31 19:49:42 · 1500 阅读 · 0 评论