随笔分类 -  C/C++

摘要:以下是该无聊的程序:#include #include char* get_str() { int x[10]; char str[] = "hello world! long long long long long long long!!!"; ... 阅读全文
posted @ 2014-06-05 18:01 女孩不哭 阅读(414) 评论(0) 推荐(0) 编辑
摘要:看一小段C语言程序:int main(){ float x = 1.3; x = x - (int)x; int i = (int)(x*10); return 0;}在你心目中, 变量 I 是怎样的结果?如果你理所当然地认为是3的话, 那么你就错了~~~实际结果应该是2. ... 阅读全文
posted @ 2014-05-02 00:28 女孩不哭 阅读(3917) 评论(0) 推荐(0) 编辑
摘要:原题目在这里: http://hi.baidu.com/shilyx/item/672736e14a14a90c64db003a要求://给出类Test的定义和实现,使程序编译通过,//并且main函数中的输出语句输出8个100。#include class Test{};int main(){ ... 阅读全文
posted @ 2014-04-03 00:34 女孩不哭 阅读(1107) 评论(0) 推荐(0) 编辑
摘要:原文:https://blog.twofei.com/616/ 用我的理解通俗地解释一下什么是C++中的Thunk技术吧! Thunk技术就是申请一段可执行的内存, 并通过手动构造CPU指令的形式来生成一个小巧的, 具有明确作用的代码块. 小巧? 具有明确作用? 你曾经初学C++时, 如果我没猜错的 阅读全文
posted @ 2013-09-11 00:44 女孩不哭 阅读(4815) 评论(1) 推荐(1) 编辑
摘要:参见:http://blog.twofei.com/cc/impl/calling-convension.html 调用约定(Calling Convention)是指在程序设计语言中为了实现函数调用而建立的一种协议. 这种协议规定了该语言的函数中的参数传送方式,参数是否可变和由谁来处理堆栈等问题.... 阅读全文
posted @ 2013-09-11 00:22 女孩不哭 阅读(1096) 评论(0) 推荐(0) 编辑
摘要:这里, 我整理了4种C++中取成员函数地址的方法, 第1,2,4种整理于网上的方法, 第3种cdecl_cast是我自己想到的. 其中, 第4种(汇编)的方法不能在VC6上编译通过. 推荐使用第1,2种方法(pointer_cast 和 union_cast). 至于:为什么要取成员函数的地... 阅读全文
posted @ 2013-08-17 11:00 女孩不哭 阅读(14629) 评论(5) 推荐(3) 编辑
摘要:所谓的求成员大小, 是求成员在该结构体中 用 sizeof(结构体名.结构体成员名) 求来的. 很多时候我们需要知道一个结构体成员中的某个成员的大小, 但是我们又不需要定义该结构体类型的变量(定义的话会让人难以理解, 又没有实际的作用, 干嘛要定义?). 考虑可以用指针来反求, 比如有一个 POINT 类型的指针 pPoint, 那么: sizeof(pPoint->x) 即为 x 成员的大小, 由于 sizeof 是在编译时刻求值, 且 sizeof 不会对其表达式求值计算, 只判断类型(当然包含定义), 所以:此时的 pPoint 的值可以是任意的哦~~~ 当然, ... 阅读全文
posted @ 2013-06-23 14:41 女孩不哭 阅读(2605) 评论(0) 推荐(0) 编辑
摘要:前几天看到一个宏, 它大概是这样的: #define assert_param(expr) ((expr) ? (void)0 : assert_failed((u8 *)__FILE__, __LINE__)) 代码的含意简单, 关键是那个 (void)0 的用法, 我还是第一次见到(别笑). 我用 void 的时候, 有两种情况: 1.放到函数前面, 强调函数没有返回值, 也就是说函数不能作右值 如: void fun(int x); 2.放到函数形参里面, 强调函数无任何参数 如: int fun(void); 还有一种用法是: #d... 阅读全文
posted @ 2013-06-23 14:23 女孩不哭 阅读(21814) 评论(11) 推荐(0) 编辑
摘要:#include <stdio.h>typedef int (*pfun)(int a,int b);int f(int a,int b){ return printf("%d\n",a+b);}int main(void){ pfun pfun = f; pfun(1,2); return 0;} 上面C语言片段中: pfun pfun = f; pfun(1,2); 有问题么? 为什么?女孩不哭 @ 2013-05-11 20:58:06 @ http://www.cnblogs.com/nbsofer 阅读全文
posted @ 2013-05-11 20:58 女孩不哭 阅读(463) 评论(5) 推荐(0) 编辑
摘要:#include <stdio.h>#include <string.h>int a;int a;char str[16];char str[16];int main(void){ strcpy(str,"女孩不哭!"); puts(str); return 0;}上面的代码有错误吗, 为什么?女孩不哭 @ 2013-05-11 20:50:24 @ http://www.cnblogs.com/nbsofer 阅读全文
posted @ 2013-05-11 20:51 女孩不哭 阅读(498) 评论(3) 推荐(0) 编辑
摘要:这篇文章主要是描述WDK中对LIST_ENTRY双向链表的操作的相关函数(不包含原子操作)的实现以及使用范例. 代码中我用一个结构体+函数指针的方式把函数给包裹了一下,看不惯的可以直接调用原函数即可. 如果不懂CONTAINING_RECORD,参见:我对CONTAINING_RECORD宏的详细解释(http://www.cnblogs.com/nbsofer/archive/2013/01/07/2849913.html) 关键词:WDK,LIST_ENTRY,CONTAINING_RECORD 2013-07-14 更新:加入了list_remove函数,实现移除双向链表中的... 阅读全文
posted @ 2013-02-25 13:31 女孩不哭 阅读(1973) 评论(0) 推荐(0) 编辑
摘要:tfref 宏CONTAINING_RECORD的用处其实还是相当大的, 而且很是方便, 它的主要作用是: 根据结构体中的某成员的地址来推算出该结构体整体的地址! 下面从一个简单的例子开始说起: 我们定义一个结构体, 同时类型化:typedef struct{ int a; ... 阅读全文
posted @ 2013-01-07 19:02 女孩不哭 阅读(13615) 评论(1) 推荐(2) 编辑
摘要:RT, 用C写的, 帮别人做的作业~ 主要是用链表实现了基本的插入, 删除, 修改, 访问, 遍历, 保存, 读取等的操作 以命令的方式操作~ 话说还是我第一次写这类东西, 很不情愿的说, 都已经帮别人做了好几次的作业了 写了近400行代码, 容错能力还是不是很差, 可以用, 可以交差~ 截图:命令后面的中括号内是该命令需要的参数~以下是源代码: 分三个文件: contact.c:主程序 list.c/list.h:链表的操作//contact.c - 包含了对输入的命令的解释#include <stdio.h>#include <stdlib.h>#include.. 阅读全文
posted @ 2012-12-27 00:04 女孩不哭 阅读(3310) 评论(0) 推荐(0) 编辑
摘要:volatile在英语的意思是:挥发性的, 不稳定的, 易变的. 在编程中不是是很容易被理解的它, 加上平常很少被用到, 再加上它更多地被用于硬件编程方面, 所以就更加让一些人琢磨不透了. 总之, 作为一个变量类型修饰符, volatile的作用就是被设计用来修饰被不同线程访问和修改的变量. 在原子操作中同样会用到. 如果没有它, 很有可能使得编程写的多线程程序出现不可预期的错误, 也可能因为编译器的各种优化而导致编译后的结果表达了不同的意思, 使得程序出现难以发现的错误. 被volatile修饰的变量是说这个变量可能会被意想不到地被改变, 这样, 编译器就不会在编译会访问该变量的语句的时候. 阅读全文
posted @ 2012-12-19 21:18 女孩不哭 阅读(4990) 评论(0) 推荐(0) 编辑
摘要:#include <stdio.h>#include <urlmon.h>#pragma comment (lib, "urlmon.lib")HRESULT ( STDMETHODCALLTYPE QueryInterface )( IBindStatusCallback * This, /* [in] */ REFIID riid, /* [iid_is][out] */ void **ppvObject){ return E_NOTIMPL;}ULONG ( STDMETHODCALLTYPE AddRef )( IBindStatusCall 阅读全文
posted @ 2012-05-02 16:06 女孩不哭 阅读(1967) 评论(0) 推荐(0) 编辑
摘要:#include <windows.h>#include <stdio.h>#include <stdlib.h>int runcmd( char* lpCmd ){ char buf[2048] = {0}; //缓冲区 DWORD len; HANDLE hRead, hWrite; // 管道读写句柄 STARTUPINFO si; PROCESS_INFORMATION pi; SECURITY_ATTRIBUTES sa; //ZeroMemory( buf, 2047 ); sa.nLength = sizeof(... 阅读全文
posted @ 2011-12-05 20:06 女孩不哭 阅读(9508) 评论(0) 推荐(1) 编辑