Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: LVM_GETITEMTEXT 向桌面发送这个消息就崩溃了

回复:
user: user-1
content: 崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处，看不懂时双击下一行，直到能看懂为止。
user-0 提问: 请问如何去获取更高精度的浮点数？

回复:
user: user-1
content: http://bbs.csdn.net/topics/390676437

user: user-2
content: 要更高的只能自己写了, float只有4字节, 你可以模拟它用40字节, 这样尾数位就长了, 精度自然就高

user: user-3
content: 单精度浮点数7位有效数字。 双精度数16位有效数字。 long double 会更高  参看：浮点数在内存中的表示：http://blog.csdn.net/juanjuan888/article/details/6672517  一般double的精度都够了，如果用long double的话更高了，还想提高就用字符串或者BCD表示浮点数吧

user: user-4
content: 举个比方：打个例子：  3.1415+0.1492  取出小数部分： 1415 1492  拆分： 14                15 14                92  相加： 28                107  将28乘100加上107： 2907  变回小数加上3.0： 3.0 + 0.2907 = 3.2907  这是一个思路，关于更高精度的楼主可以思考一下

user: user-5
content: float是32位的，精度是23位，这里你可以想想23位的2进制大概能表示10进制中的多少位 double>=float，在现在多数计算机上它是64位，精度有53位，但不能保证 long double>=double，但同上 这些内置的浮点数用于不要求高精度的运算 如果你需要可以自己实现或者用已有的库
user-0 提问: 求问这段代码怎么解释，什么意思

回复:
user: user-1
content: 参考http://blog.chinaunix.net/uid-24774106-id-2779245.html 我也不太懂具体意思，不过大致意思是，rdtsc()函数用于获取当前的时钟周期数，时钟周期的值存在两个32位的寄存器里，所以要把它们变成64位的。两次调用该函数结果相减就是程序运行消耗的时钟周期数，一个时钟周期多少时间，这和硬件有关。
user-0 提问: 排序算法中插入算法，代码哪里不正确，

回复:
user: user-1
content: printf("%d",a[i]); 	} 	system("pause"); 改为: //		printf("%d",a[i]); 	} 	for(i=0;i<9;i++) 	{ 		printf("%d ",a[i]); 	} 	system("pause");

user: user-0
content: 恩，解决了问题，多谢
user-0 提问: C语言问题强制转化问题？

回复:
user: user-1
content: 理解和讨论之前请先学会如何观察！  电脑内存或文件内容只是一个一维二进制字节数组及其对应的二进制地址； 人脑才将电脑内存或文件内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……  对学习编程者的忠告： 多用小脑和手，少用大脑、眼睛和嘴，会更快地学会编程！ 眼过千遍不如手过一遍！ 书看千行不如手敲一行！ 手敲千行不如单步一行！ 单步源代码千行不如单步Debug版对应汇编一行！ 单步Debug版对应汇编千行不如单步Release版对应汇编一行！  VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化，这样过一遍不就啥都明白了吗。 对VC来说，所谓‘调试时’就是编译连接通过以后，按F10或F11键单步执行一步以后的时候，或者在某行按F9设了断点后按F5执行停在该断点处的时候。

user: user-2
content: (char *)&i ： 把 i 的地址，当作 char*类型使用， 意思是i 地址看作一个char的 地址用

user: user-3
content: 引用 5 楼 u012559846 的回复:char* 类型指针是不是就指向long int型的高字节位了？  这就要看大端还是小端存储了，但可以肯定的是：  如果long地址中数据是： 00 11 22 33 那么char中内容就为： 00

user: user-0
content: char* 类型指针是不是就指向long int型的高字节位了？

user: user-2
content: 强制类型转换 （type）是个运算符 。 ,强制类型转换，不改变内存中的一切，只是一个表达式而已。 强制类型转换的结果， 较长整型（int） 转换为较短整型 char 结果为丢弃高字节 ,保留一个字节作为表达式的结果  （type） e  ；表达式 e 本身并不会被改变， 只是表达式 （type） e   和表达式 e 相比 结果的高Bytes 丢失了 (char *)&i;  共有两个运算符，一个强制转换运算符（char *），一个取址运算符& char * 这里只是类型标识，在表达式中 *  不当作运算符处理，仅仅表示转换后的类型为 char* 这种指针类型 & e 取 表达式e,所代表内容的地址。 (char *)&i ：把 i 的地址，当作 char*类型 地址用

user: user-4
content: c指针：http://blog.csdn.net/zhangxiangdavaid/article/details/37885275

user: user-3
content: 第一个问题：int中的高位会丢失 第二个问题：将i的地址转成char*，用char来解释内存内容

user: user-5
content: char j = (char)i;会将i的低８位复制给j， 这种unsigned long i; (char *)&i; 代表什么意思？ 意思就是取i的地址，将转成char*类型的指针。
user-0 提问: 关于变量交换效率的探讨

回复:
user: user-1
content: 看下汇编代码

user: user-0
content: 引用 1 楼 user-1 的回复:不是变量类型字节越少越快！！ 32位下一次读写是4个字节 在MFC里一般都用BOOL（其实就是int）来代替bool就是为了效率更高  另外如果再送楼主2种交换a与b的方法；  方法一：     a=a+b;     b=a-b;     a=a-b;  方法二： 	a=a^b;  	b=a^b;  	a=a^b;  如果你不想用引用传入函数，那你就用指针操作用上面两种方法也行 用BOOL代替bool效率更高，是因为BOOL恰好是4个字节么？此外你提供的这两种方法我试过，效率反而不如引用第三个变量高，当然这个效率上的提高是微乎其微的。谢谢～～～

user: user-1
content: 不是变量类型字节越少越快！！ 32位下一次读写是4个字节 在MFC里一般都用BOOL（其实就是int）来代替bool就是为了效率更高  另外如果再送楼主2种交换a与b的方法；  方法一：     a=a+b;     b=a-b;     a=a-b;  方法二： 	a=a^b;  	b=a^b;  	a=a^b;  如果你不想用引用传入函数，那你就用指针操作用上面两种方法也行
user-0 提问: 向各位请教一种限制软件使用期限的思路是否可行

回复:
user: user-1
content: 加密反加密本身，是会者不难，难者不会 其实你随便加个密，都可以 只要，想破解，总会有办法的 你把你能想到的最好的加密方法，使出来， 不要考虑别人如何破解

user: user-2
content: 通过反汇编，只要改你程序判断过期时间与北京时间对比的这一步，通过OD等反汇编软件很容易定位到那一步，然后修改了那个跳转就行，你前面各种加密、从网络取什么的都没用
user-0 提问: 为什么链表的插入操作不需要返回表头

回复:
user: user-1
content: 理解和讨论之前请先学会如何观察！  计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构……  对学习编程者的忠告： 多用小脑和手，少用大脑、眼睛和嘴，会更快地学会编程！ 眼过千遍不如手过一遍！ 书看千行不如手敲一行！ 手敲千行不如单步一行！ 单步源代码千行不如单步Debug版对应汇编一行！ 单步Debug版对应汇编千行不如单步Release版对应汇编一行！  VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化，这样过一遍不就啥都明白了吗。 对VC来说，所谓‘调试时’就是编译连接通过以后，按F10或F11键单步执行一步以后的时候，或者在某行按F9设了断点后按F5执行停在该断点处的时候。 （Turbo C或Borland C用Turbo Debugger调试,Linux或Unix下用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。）  想要从本质上理解C指针，必须学习汇编以及C和汇编的对应关系。 从汇编的角度理解和学习C语言的指针，原本看似复杂的东西就会变得非常简单！ 指针即地址。“地址又是啥？”“只能从汇编语言和计算机组成原理的角度去解释了。” 但我又不得不承认：  有那么些人喜欢或者适合用“先具体再抽象”的方法学习和理解复杂事物；  而另一些人喜欢或者适合用“先抽象再具体”的方法学习和理解复杂事物。 而我本人属前者。  不要企图依赖输出指针相关表达式...的值【比如printf("%p\n",...);或者cout<<...】来理解指针的本质， 而要依赖调试时的反汇编窗口中的C/C++代码【比如void *p=(void *)(...);】及其对应汇编指令以及内存窗口中的内存地址和内存值来理解指针的本质。  这辈子不看内存地址和内存值；只画链表、指针示意图，画堆栈示意图，画各种示意图，甚至自己没画过而只看过书上的图……能从本质上理解指针、理解函数参数传递吗？本人深表怀疑！ 这辈子不种麦不收麦不将麦粒拿去磨面；只吃馒头、吃面条、吃面包、……甚至从没看过别人怎么蒸馒头，压面条，烤面包，……能从本质上理解面粉、理解面食吗？本人深表怀疑！！  提醒： “学习用汇编语言写程序” 和 “VC调试(TC或BC用TD调试)时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化，这样过一遍不就啥都明白了吗。 （Linux或Unix下可以在用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。） 想要从本质上理解C指针，必须学习C和汇编的对应关系。” 不是一回事！  不要迷信书、考题、老师、回帖； 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实！  有人说一套做一套，你相信他说的还是相信他做的？ 其实严格来说这个世界上古往今来所有人都是说一套做一套，不是吗？  不要写连自己也预测不了结果的代码！  电脑内存或文件内容只是一个一维二进制字节数组及其对应的二进制地址； 人脑才将电脑内存或文件内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……  十字链表交换任意两个节点C源代码（C指针应用终极挑战）http://download.csdn.net/detail/zhao4zhong1/5532495

user: user-0
content: 引用 2 楼 liganglester 的回复:>为什么调用链表插入函数时没用二级指针，这是为什么？ 链表是由若干节点构成的，每个节点都对应一块连续内存。 而链表节点里都会有至少一个指针变量，用来指向别的节点。 这个指针是一级指针，改变这个指针变量的值，也就更改了这个节点所指向（链接）的节点。  我不是很清楚你为什么认为需要二级指针。 现在明白了 每个链表结点都保存着数据和地址，改变表结点中的地址是改变空间的内容，并不是说改变地址就得用二级指针。关键看是改变空间的地址还是改变空间的内容。

user: user-0
content: 引用 2 楼 liganglester 的回复:>为什么调用链表插入函数时没用二级指针，这是为什么？ 链表是由若干节点构成的，每个节点都对应一块连续内存。 而链表节点里都会有至少一个指针变量，用来指向别的节点。 这个指针是一级指针，改变这个指针变量的值，也就更改了这个节点所指向（链接）的节点。  我不是很清楚你为什么认为需要二级指针。 我现在明白了。

user: user-2
content: “两个指针变量间的赋值是改变地址吧”  只改变一个，好好想想改的是哪个

user: user-3
content: >为什么调用链表插入函数时没用二级指针，这是为什么？ 链表是由若干节点构成的，每个节点都对应一块连续内存。 而链表节点里都会有至少一个指针变量，用来指向别的节点。 这个指针是一级指针，改变这个指针变量的值，也就更改了这个节点所指向（链接）的节点。  我不是很清楚你为什么认为需要二级指针。

user: user-0
content: 上面的代码里我并没有让插入函数返回链表表头，可还是改变的链表，解释下吧
user-0 提问: 没有return的函数但是返回了期望值？求助

回复:
user: user-1
content: 反正我当年大学课程是先学的汇编。

user: user-1
content: 理解和讨论之前请先学会如何观察！  计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构……  对学习编程者的忠告： 多用小脑和手，少用大脑、眼睛和嘴，会更快地学会编程！ 眼过千遍不如手过一遍！ 书看千行不如手敲一行！ 手敲千行不如单步一行！ 单步源代码千行不如单步Debug版对应汇编一行！ 单步Debug版对应汇编千行不如单步Release版对应汇编一行！  VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化，这样过一遍不就啥都明白了吗。 对VC来说，所谓‘调试时’就是编译连接通过以后，按F10或F11键单步执行一步以后的时候，或者在某行按F9设了断点后按F5执行停在该断点处的时候。

user: user-2
content: 引用 6 楼 zhao4zhong1 的回复:理解和讨论之前请先学会如何观察！  计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构……  对学习编程者的忠告： 多用小脑和手，少用大脑、眼睛和嘴，会更快地学会编程！ 眼过千遍不如手过一遍！ 书看千行不如手敲一行！ 手敲千行不如单步一行！ 单步源代码千行不如单步Debug版对应汇编一行！ 单步Debug版对应汇编千行不如单步Release版对应汇编一行！  VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化，这样过一遍不就啥都明白了吗。 对VC来说，所谓‘调试时’就是编译连接通过以后，按F10或F11键单步执行一步以后的时候，或者在某行按F9设了断点后按F5执行停在该断点处的时候。 老师 人家不都是说先学C再学汇编吗

user: user-3
content: 引用 7 楼 Saleayas 的回复:如果函数没有明确的 返回值，那么此时是有返回值的，此时返回值是没有定义的。 但是 main 函数是例外的。没有返回值的时候返回 0.  而其他函数，如果没有明确的返回值。那么可能就是返回 _AX 寄存器的值。  但是，现在的编译器会报错的。可以使用 no_return 只是强制没有返回值。  void 是没有返回值。  _Noreturn 是不会返回。（比如程序会在函数内部结束，如 abort(), exit() 等）

user: user-4
content: 这只是一个巧合，查看反汇编代码就能明白，return a;的本质是把a的值放到寄存器EAX里， get=b1(up,down)的本质就是把寄存器EAX的值赋值到get变量中。 如果b1函数没有return，但是b1函数内的代码执行完的时候，碰巧寄存器EAX中刚好保存着期望的值（EAX寄存器使用得很频繁，这种概率不小），get=b1(up,down)就取到了正确的值

user: user-5
content: 如果函数没有明确的 返回值，那么此时是有返回值的，此时返回值是没有定义的。 但是 main 函数是例外的。没有返回值的时候返回 0.  而其他函数，如果没有明确的返回值。那么可能就是返回 _AX 寄存器的值。  但是，现在的编译器会报错的。可以使用 no_return 只是强制没有返回值。

user: user-6
content: VS上直接不能通过编译：error C4716: “b1”: 必须返回一个值  另外你get也没定义类型

user: user-0
content: 自己还是想不太明白，求助大家

user: user-3
content: for main: c11 draft n1570 5.1.2.2.3 Program termination 1 If the return type of the main function is a type compatible with int, a return from the initial call to the main function is equivalent to calling the exit function with the value returned by the main function as its argument; reaching the } that terminates the main function returns a value of 0. If the return type is not compatible with int, the termination status returned to the host environment is unspecified.  其它函数： 6.9.1 Function definitions 12 If the } that terminates a function is reached, and the value of the function call is used by the caller, the behavior is undefined.

user: user-0
content: 引用 3 楼 user-6 的回复:VS上直接不能通过编译：error C4716: “b1”: 必须返回一个值  另外你get也没定义类型哦哦，我是删了前面一些和这个问题无关的定义，没想到把这个删了。。。但之前是可以通过编译的，我再试试

user: user-0
content: 函数b1没有return（原本应该是return x）,但是却发现照样在函数调用的时候，get得到了输入的值x，这是什么情况。在VS上是这样，gcc编译器的结果也是如此。但是单独将b1函数作为主函数时，没有return不能正常返回期望的值。这是为什么？求助！非常感谢！
user-0 提问: C语言windows编程 如何同时播放两个音乐 ？

回复:
user: user-1
content: mciSendString？ http://blog.163.com/tab_98/blog/static/1192409720159227278402/

user: user-2
content: 换个API吧, 用playsound开发游戏, 是不是用BeginPaint渲染图像啊
user-0 提问:  怎么把一组数从小到大排列，在把最小的两个数相加，相加的两个数融合为一个，就是原来相加的两个值变为一个值，接着在重新排列，再把最小的两个数相加

回复:
user: user-1
content: 引用 楼主 qq_32635127 的回复:怎么把一组数从小到大排列，在把最小的两个数相加，相加的两个数融合为一个，就是原来相加的两个值变为一个值，接着在重新排列，再把最小的两个数相加，直到所有数融合为一个数，例如 5  1 1 1 1 1 得到12  不需要排列啊，提供一个思路： 你只需要通过遍历，找出两个最小的数，然后把这两数相加，删除这两数，插入相加结果，之后进行下一次操作
user-0 提问: 柔性数组

回复:
user: user-1
content: name[]不占用空间。 不建议使用这种特殊的"技巧"，即使使用，也务必封装后使用。不过封装的话直接使用指针更方便。

user: user-2
content: 参看：http://www.cnblogs.com/Daniel-G/archive/2012/12/02/2798496.html

user: user-3
content: C缓冲区，经常采用这种方式 这种方式只能用于动态分配
user-0 提问: &(void *){ NULL } 是什么意思

回复:
user: user-0
content: 谢谢各位， 我找到了替换语法 void av_freep(void *arg) { 	void *val = NULL;  	memcpy(&val, arg, sizeof(val)); 	memset(arg, 0, sizeof(val));  // 替换 memcpy(arg, &(void *){ NULL }, sizeof(val));  	av_free(val); }

user: user-1
content: void *pNULL = NULL; memcpy(arg, &pNULL, sizeof(val));

user: user-2
content: compound literals C99的语法，注意msvc不支持C99，今后也很可能不会支持

user: user-3
content: (void *){ NULL } 是 C99 的 compound literal VS 不支持。  6.5.2.5 Compound literals 4 A postfix expression that consists of a parenthesized type name followed by a brace-enclosed list of initializers is a compound literal. It provides an unnamed object whose value is given by the initializer list.  &(void *){ NULL } 是取它的地址。

user: user-0
content: MINGW32 gcc 编译： void *p = &(void *){ NULL }; // 能编译通过 VS Studio 编译： void *p = &(void *){ NULL }; // 不能编译通过

user: user-4
content: 没这种语法。。

user: user-5
content: 看看arg里面是什么货
user-0 提问: code：：blocks编写MFC问题

回复:
user: user-1
content: mfc是微软专用的，除非把codeblcoks的编译器指定为vc的编译器，然后编译。但这明显不如直接用vc来的方便

user: user-2
content: 不可以吧，你需要有MFC的类库等文件，如果想写MFC或者复杂的项目，还是应该使用VS
user-0 提问: 关于C语言运行内存布局

回复:
user: user-1
content: VMMap 是进程虚拟和物理内存分析实用工具。http://technet.microsoft.com/zh-cn/sysinternals/dd535533

user: user-2
content: 内存布局和语言有关系吗？

user: user-3
content: 不一定需要每个都有，这是汇编语言的内容，堆栈段是一个， 不是分开堆段、栈段
user-0 提问: 为什么C99以前的标准里没有vscanf, vfscanf, vsscanf函数

回复:
user: user-0
content: 对不起各位, 本人初次使用无满意结帖, 不知道不会给分, 本来明明是每层楼的分都给好的, 点了无满意结帖, 只提示说不会返分, 没想到给分都没给.

user: user-1
content: 引用 10 楼 u010165006 的回复:[quote=引用 9 楼 zhao4zhong1 的回复:] [quote=引用 8 楼 u010165006 的回复:] 因为谭老的书里没讲 [/quote] 谭老退休了，新版本无望了，新一代C语言圣经的希望就寄托在赵老师身上了[/quote] 我看行。

user: user-1
content: 引用 8 楼 u010165006 的回复:因为谭老的书里没讲

user: user-2
content: 引用 9 楼 zhao4zhong1 的回复:[quote=引用 8 楼 u010165006 的回复:] 因为谭老的书里没讲 [/quote] 谭老退休了，新版本无望了，新一代C语言圣经的希望就寄托在赵老师身上了

user: user-2
content: 因为谭老的书里没讲

user: user-3
content: 鬼知什么原因，好早前了

user: user-4
content: 你是说 C99 嘛？有这几个函数啊 ...  fprintf fscanf printf scanf snprintf sprintf sscanf vfprintf vfscanf vprintf vscanf vsnprintf vsprintf vsscanf

user: user-4
content: 引用 5 楼 fefe82 的回复:你是说 C99 嘛？有这几个函数啊 ...  fprintf fscanf printf scanf snprintf sprintf sscanf vfprintf vfscanf vprintf vscanf vsnprintf vsprintf vsscanf  哦，是说以前的，看错了，抱歉。

user: user-0
content: 谁帮我去stackoverflow或其他外国网站上去问问, 我本想自己去问, 注册时就卡了, 看提示好像调用了一个被墙的js, 所以注册不了.

user: user-1
content: 不知道，去挖坟问当初制定标准的人吧。

user: user-5
content: 25年前的年的事情了，估计标准委员会那帮人都忘了为什么了。

user: user-0
content: 100分 没人接吗
user-0 提问: 函数声明了三个unsigned char的形参，然后又用void修饰，是什么意思？

回复:
user: user-1
content: 据说是避免编译器给警告，说函数参数没有使用等，可以删除

user: user-0
content: 引用 1 楼 jiht594 的回复:没有使用这几个变量吧。 如果不这样作， 编译器会给警告“你定义了变量没用啊， 是不是出错了？” 加了void，编译器就没有警告信息了 我尝试把这三个变量注释（在用void修饰的那个地方），编译也没错。您看我重新贴的图。

user: user-0
content: 这是整个函数

user: user-2
content: 没有使用这几个变量吧。 如果不这样作， 编译器会给警告“你定义了变量没用啊， 是不是出错了？” 加了void，编译器就没有警告信息了

user: user-3
content: 不是一次写成的代码估计 开始没有设计代码，是个空函数 用开头那几句，免警告 后面的代码是，后来添加的

user: user-2
content: 引用 3 楼 iMk__ 的回复:[quote=引用 1 楼 jiht594 的回复:] 没有使用这几个变量吧。 如果不这样作， 编译器会给警告“你定义了变量没用啊， 是不是出错了？” 加了void，编译器就没有警告信息了 我尝试把这三个变量注释（在用void修饰的那个地方），编译也没错。您看我重新贴的图。[/quote]  警告是可能没有的。把三个void后面的代码都删了，看看有警告吗？或者把HAL...那个宏定义成3试试  没有警告你就可以删掉，不在乎警告也可以删掉，反正有警告一样能编译
user-0 提问: 顺序表并归问题，总出错c(15) : error C2143: syntax error : missing ')' before '&'

回复:
user: user-0
content: 引用 3 楼 u012033027 的回复:你用的C编译器吧，不支持别名符号SuList &L，改成SqList *吧。 要么改用C++编译器   就是这个问题，或者一个方法就是加上C++头文件include<iostream.h>也行

user: user-1
content: 你用的C编译器吧，不支持别名符号SuList &L，改成SqList *吧。 要么改用C++编译器

user: user-2
content: 楼主重新建一个工程复制进去看下

user: user-2
content: VC6.0和VS都帮你试了，可以正常编译链接
user-0 提问: c(15) : error C2143: syntax error : missing ')' before '&'怎么解决？

回复:
user: user-1
content: 偶遇到类似问题都是用 “每次用/*...*/注释掉不同部分再重新编译，直到定位到具体语法出错的位置。” 的方法解决的。

user: user-2
content: 这是大名鼎鼎的《数据结构（C语言版）》中的吧

user: user-3
content: 你用的C编译器吧，不支持别名符号SuList &L，改成SqList *吧。 要么改用C++编译器

user: user-4
content: 编译连接没发生所述问题
user-0 提问: 单链表的指针变动

回复:
user: user-1
content: 谢谢各位，学习了

user: user-1
content: 谢谢各位，学习了

user: user-0
content: 谢谢各位，学习了

user: user-0
content: 确实，在地址不连续的情况下，++之后的不一定就是紧接着的地址

user: user-0
content: 引用 1 楼 user-4的回复:链表大多情况下并不是连续的性线存储，p++当然不行。 哦，原来是这样的，谢谢了

user: user-2
content: 引用 2 楼 paschen 的回复:你重载了++运算符就可以了，参看C++STL中的list实现   这样就不是C语言了。

user: user-3
content: 引用 3 楼 u012061345 的回复:[quote=引用 2 楼 paschen 的回复:] 你重载了++运算符就可以了，参看C++STL中的list实现   这样就不是C语言了。 [/quote]  没注意楼主是用C语言，那没办法，只能用 p=p->next ， 因为p->next 通常不会等于p+1

user: user-3
content: 你重载了++运算符就可以了，参看C++STL中的list实现

user: user-4
content: 链表大多情况下并不是连续的性线存储，p++当然不行。
user-0 提问: windows系统中如何使一个程序获得最多的cpu时间？从而提高效率？

回复:
user: user-1
content: 首先你有那么多工作要做吗  可以考虑使用多线程，比如你是i7 4核8线程CPU，你单线程满占任务管理器里大概就占13%（100 / 8） 如果你开多个线程，或者并行运算等，可使CPU占到100% 如果你程序开了很多线程，且每个都很大工作量，那么你关掉一些很占CPU的程序也会有一定提高，毕竟CPU资源有限 但不是各种工作用多线程处理都会很方便，涉及同步等问题

user: user-2
content: 无profiler不要谈效率！！尤其在这个云计算、虚拟机、模拟器、CUDA、多核 、多级cache、指令流水线、多种存储介质、……满天飞的时代！

user: user-0
content: 谢谢回复，意思是减少其他程序运行，不会有提升本程序获得的cpu时间片数目？那么windows多任务系统中有没有让一个程序占用最多的cpu时间的办法？

user: user-3
content: 首先把线程个数弄成和 CPU 核心数相同的个数，然后把线程的优先级提到最高。  对应不怎么活动的进程，关闭可以节省内存，但是节省的 CPU 很少
user-0 提问: 二叉查找树的插入-C语言实现

回复:
user: user-0
content: 谢谢各位，学习了

user: user-0
content: 引用 2 楼 user-2 的回复:p == NULL || key == p->key_value 的时候， father 不会被赋值  确实是，当p==nul的时候是不会被赋值的，谢了

user: user-1
content: 创建根结点的时候怎么办

user: user-2
content: p == NULL || key == p->key_value 的时候， father 不会被赋值

user: user-0
content: 支持一个，支持支持支持
user-0 提问: 学习C语言中遇到了一个简单的编译问题不知道怎么解决还请各位前辈指教

回复:
user: user-0
content: 引用 2 楼 u010165006 的回复:void ave_max_min(int b[10],int n); 返回值void average = ave_max_min(a,10); 又有返回值 改成float ave_max_min(int b[10],int n); 试试，函数里面要有return谢了

user: user-1
content: void ave_max_min(int b[10],int n); 返回值void average = ave_max_min(a,10); 又有返回值 改成float ave_max_min(int b[10],int n); 试试，函数里面要有return

user: user-0
user-0 提问: 菜鸟求助代码改良

回复:
user: user-1
content: #include<stdio.h> int main() {     struct Record     //分数     {         int ranking;  //排行         char *name;  //姓名         int score;     };     struct Record num[3]={         {1,"jack",5000},         {2,"Tim",4100},         {3,"rose",3500}     };     struct Record t;      num[0].ranking=4;      int a,b;      for(a=0;a<3-1;a++)     for(b=a+1;b<3;b++)     if (num[a].score<num[b].score) {         t=num[a];num[a]=num[b];num[b]=t;     }      b=1;     for(a=0;a<3;a++) num[a].ranking=b++;      for(a=0;a<3;a++)     {         printf("%d %-5s %d\n",num[a].ranking,num[a].name,num[a].score);     }      return 0; } //1 jack  5000 //2 Tim   4100 //3 rose  3500 //

user: user-2
content: 引用 3 楼 paschen 的回复:这样写：   #include<stdio.h> #include <algorithm>  int main() { 	struct Record     //分数 	{ 		int ranking;  //排行 		char *name;  //姓名 		int score; 	}; 	struct Record num[3]={ 		{1,"jack",5000}, 		{2,"Tim",4100}, 		{3,"rose",3500} 	}; 	class Compare 	{ 	public: 		bool operator()(const Record& r1, const Record& r2) 		{ 			return r1.score > r2.score; 		} 	}; 	 	std::sort(num, num + 3, Compare());  	for(int a=0;a<3;a++) 	{ 		num[a].ranking = a + 1; 		printf("%d %s %d \n",num[a].ranking,num[a].name,num[a].score); 	} 	return 0; }   这是用STL中的sort来实现的 可以扩展到数组中元素更多的情况，需要将std::sort(num, num + 3, Compare()); 这里3改成数组元素个数

user: user-2
content: 这样写：   #include<stdio.h> #include <algorithm>  int main() { 	struct Record     //分数 	{ 		int ranking;  //排行 		char *name;  //姓名 		int score; 	}; 	struct Record num[3]={ 		{1,"jack",5000}, 		{2,"Tim",4100}, 		{3,"rose",3500} 	}; 	class Compare 	{ 	public: 		bool operator()(const Record& r1, const Record& r2) 		{ 			return r1.score > r2.score; 		} 	}; 	 	std::sort(num, num + 3, Compare());  	for(int a=0;a<3;a++) 	{ 		num[a].ranking = a + 1; 		printf("%d %s %d \n",num[a].ranking,num[a].name,num[a].score); 	} 	return 0; }

user: user-3
content: 结构中ranking看起来没用, 排序好了就自然定了, 调用qsort就好了
user-0 提问: 求助    关于单链表

回复:
user: user-1
content: void insertList((List *head, int i, int x) {     ......; } //添加一个参数，表示要插入的位置;    然后zamain()函数中调用就OK了    insertList(head, i, e);

user: user-2
content: insertList(head,x); 这句中的head改成你想要的位置
user-0 提问: 求大神解答实在找不出毛病在哪里

回复:
user: user-1
content: 请问 ： scanf("%c",&c); scanf("%d",&a); 这样呢，a会等于10吗 为什么[/quote] 有时候发帖不是高效的学习方式，往电脑里敲一下代码，运行就会得知结果，然后再百度相关知识点比如此处的scanf，你就会得知答案。祝你好运！[/quote] 我已经测试过了只是想问的是为什么，我大部分时候也是自己查资料，发帖要么是因为实在查不到了要么是因为要休息或要做别的事情了，先发个贴看看能不能得到答案

user: user-2
content: 引用 6 楼 gblhack 的回复:[quote=引用 4 楼 lz20120808 的回复:] scanf 读到空格会暂停，后面的就回留到缓冲区。 scanf 读到enter会暂停，enter留在缓冲区，如果后面还有定义的变量，会赋值给后面的变量。 ag. scanf("%d",&a); scanf("%c",&c); 输入a回车，c就会是回车字符  请问 ： scanf("%c",&c); scanf("%d",&a); 这样呢，a会等于10吗 为什么[/quote] 有时候发帖不是高效的学习方式，往电脑里敲一下代码，运行就会得知结果，然后再百度相关知识点比如此处的scanf，你就会得知答案。祝你好运！

user: user-1
content: 引用 4 楼 lz20120808 的回复:scanf 读到空格会暂停，后面的就回留到缓冲区。 scanf 读到enter会暂停，enter留在缓冲区，如果后面还有定义的变量，会赋值给后面的变量。 ag. scanf("%d",&a); scanf("%c",&c); 输入a回车，c就会是回车字符  请问 ： scanf("%c",&c); scanf("%d",&a); 这样呢，a会等于10吗 为什么

user: user-2
content: 引用 3 楼 pr1mer 的回复:是不是scanf读取到enter之后会停止，而enter留在缓冲区队列里？ scanf 读到空格会暂停，后面的就回留到缓冲区。 scanf 读到enter会暂停，enter留在缓冲区，如果后面还有定义的变量，会赋值给后面的变量。 ag. scanf("%d",&a); scanf("%c",&c); 输入a回车，c就会是回车字符

user: user-2
content: scanf 读到空格会暂停，后面的就回留到缓冲区。 scanf 读到enter会暂停，enter留在缓冲区，如果后面还有定义的变量，会赋值给后面的变量。 ag. scanf("%d",&a); scanf("%c",&c); 输入a回车，c就会是回车字符

user: user-0
content: 是不是scanf读取到enter之后会停止，而enter留在缓冲区队列里？

user: user-3
content: 最后的scanf前加一个  getchar(); 接收掉前面输入时留下的换行符 同时char b[10][8] 这里改成char[10][9]， 不然"seventy "就溢出了  修改后代码：  int main(void) { 	char again='Y'; 	do 	{ 		int num;//数字 		char result[100] = "";//结果 		size_t result_len = sizeof(result); 		char connect1[10] = " hundred";//连接1 		char connect2[10] = " and ";//连接2 		char a[10][7] = { 			" ","One","Two","Three","Four","Five","Six ","Seven ","Eight ","Nine "//百位 		}; 		char b[10][9] = { 			" "," ","twenty ","thirty ","forty ","fifty ","sixty ","seventy ","eighty ","ninty "//十位 		}; 		char c[10][7] = { 			" ","one","two","three","four","five","six ","seven ","eight ","nine "//个位 		};  		while (true)//检查输入是否在0-1000 		{ 			printf("\nEnter a number less than 1000.\n"); 			scanf("%d", &num); 			if ((num < 0) || (num>999)) 				printf("You are kidding.Enter again."); 			else 				break; 		} 		//形成最终结果 		int g = num / 100; 		num = num - g * 100;  		if (strcat_s(result, result_len, a[g])) 		{ 			printf("Error"); 			return 1; 		} 		if (a[g][0] != ' ') 			strcat_s(result, result_len, connect1); 		if ((num > 0) && (g != 0)) 			strcat_s(result, result_len, connect2); 		g = num / 10; 		if (strcat_s(result, result_len, b[g])) 		{ 			printf("Error"); 			return 2; 		} 		num = num - g * 10; 		g = num; 		if (strcat_s(result, result_len, c[g])) 		{ 			printf("Error"); 			return 3; 		} 		printf("%s", result);//输出结果 		printf("\nDo you want to try again? Y or N\n");//判断是否重复操作 		getchar(); 		scanf("%c", &again); 	} while (toupper(again) =='Y'); 	getch(); 	return 0; }

user: user-4
content: scanf(" %c", &again);//"和%之间添加一个空格？
user-0 提问: C语言有没有可以动态获取数据类型的函数

回复:
user: user-0
content: 引用 6 楼 paschen 的回复:不需要传递参数，改成模板函数就行了  如下面这个模板函数可以用于任意类型  template<class T> T add(T& a, T&b) { 	return a + b; };  原来这是模板的问题，

user: user-0
content: 引用 7 楼 u014271836 的回复:你去看看c里边的  回调函数，转换表  把比较和排序分离 我是看了一个教程的，教程里面写了一个数据结构  它写成了一个通用的数据结构，然后我就想加一个排序的， 然后就发现数据类型的问题

user: user-1
content: C 还可以，用void*,数据大小，函数指针（回调函数），实现

user: user-2
content: 你去看看c里边的  回调函数，转换表  把比较和排序分离

user: user-3
content: 不需要传递参数，改成模板函数就行了  如下面这个模板函数可以用于任意类型  template<class T> T add(T& a, T&b) { 	return a + b; };

user: user-1
content: C 可以这么处理 抽象链表类型 struct linklist  {   struct linklist *next;   char data[];//0 长度数组，用以适应任意长度数组。 }；  具体链表类型  #define deflist(type) typedef \  struct  linklist ##type \ {\ struct linklist list;\ type elem;\ };    #define NodeSize(type) sizeof(struct  linklist ##type)  C++ 直接模板，或者干脆用 STL

user: user-4
content: 楼主学习STL正当时。 http://www.cplusplus.com

user: user-5
content: 引用 2 楼 general_wang 的回复:[quote=引用 楼主 u010284226 的回复:] 我在写一个对链表排序的函数，可以对任意的结构体类型的数据都可以排序 那么怎么可以给这个函数传递数据类型的这样一个参数啊， 这样我就可以实现这个链表排序函数的通用性啊  这个方案还是比较赞的。  如果非要了解了解 c在获取数据类型方面的话，gnu 有个扩展： typeof(TYPE) 不过属于方言。 [/quote]  以上引用点错了，应该是引用SF的。

user: user-5
content: 引用 楼主 u010284226 的回复:我在写一个对链表排序的函数，可以对任意的结构体类型的数据都可以排序 那么怎么可以给这个函数传递数据类型的这样一个参数啊， 这样我就可以实现这个链表排序函数的通用性啊  这个方案还是比较赞的。  如果非要了解了解 c在获取数据类型方面的话，gnu 有个扩展： typeof(TYPE) 不过属于方言。

user: user-6
content: 传一个比较用的函数指针进来了。  排序函数没有必要关心是什么类型，需要比较的时候就使用传入比较函数进行比较。  可以参考 qsort 的接口： void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *)); 最后一个参数就是比较函数指针。
user-0 提问: C语言函数调用问题。

回复:
user: user-0
content: 引用 3 楼 user-3 的回复:看代码都是除16,模16的, data不象是short在用,倒象是当byte在用, 假设调用short a[]={0x12,0x34,0x56,0x78},  那么调用结果是0x78563412你的意思是、？？？

user: user-1
content: 仅供参考：#include <stdio.h> #include <stdlib.h> #include <conio.h> unsigned int iv,i; unsigned char BCD[5];//定长10位BCD码 unsigned char sv[11]; void main() {     iv=123456789;//最大10位无符号正整数     //INT2BCD     sprintf(sv,"%010u",iv);     for (i=0;i<10;i+=2) {         BCD[i/2]=(sv[i]<<4)|(sv[i+1]&0x0F);     }     printf("BCD=%02x%02x%02x%02x%02x\n",BCD[0],BCD[1],BCD[2],BCD[3],BCD[4]);     //BCD2INT     for (i=0;i<10;i+=2) {         sv[i]='0'|(BCD[i/2]>>4);         sv[i+1]='0'|(BCD[i/2]&0x0F);     }     sscanf(sv,"%010u",&iv);     printf("iv=%010u\n",iv);     getch(); }

user: user-2
content: 这是4字节表示的，8 位 十六进制数（二进制表示）， 不过似乎不必这么转换，交换一下位置也就够了。 也可能根本就不需要交换。

user: user-3
content: 看代码都是除16,模16的, data不象是short在用,倒象是当byte在用, 假设调用short a[]={0x12,0x34,0x56,0x78},  那么调用结果是0x78563412
user-0 提问: 刚写的小程序，不知哪错，请帮忙解惑

回复:
user: user-1
content: 我来晚了~~~~~

user: user-2
content: switch ('c')改为switch(word)

user: user-3
content: 如果是switch后根的是'c'，则一个都不匹配，运行了default

user: user-4
content: switch后面是条件变量，不能是常量。

user: user-5
content: switch (word)

user: user-6
content: switch ('c') 改成 switch (c)

user: user-7
content: switch (word)

user: user-8
content: switch(word)

user: user-9
content: 第六行: switch ('c')  =>   switch (word)

user: user-10
content: switch ('c')
user-0 提问: 求大神帮忙看一道题

回复:
user: user-0
content: 引用 3 楼 user-3 的回复:其它代码类似 int a[4][4]; void swapline(int n,int m){     for(int i=0;i<4;i++){         int t =a[n][i];         a[n][i] =a[m][i];         a[m][i] =t;     } } 谢谢啦

user: user-1
content: 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！

user: user-2
content: 我怎么发现我传的图片没有上去

user: user-2
content: k,n,m,你可以由自己从黑窗口输入，我为了方便就直接给出了

user: user-3
content: 其它代码类似 int a[4][4]; void swapline(int n,int m){     for(int i=0;i<4;i++){         int t =a[n][i];         a[n][i] =a[m][i];         a[m][i] =t;     } }

user: user-0
content: 来人呐

user: user-0
user-0 提问: 为什么程序只能输出未插入数据前的链表

回复:
user: user-0
content: 引用 1 楼 dezhihuang 的回复:60行的 PrePosition = InsertNode ; 改为 PrePosition->next = InsertNode ; 原因已找到，谢谢

user: user-1
content: 60行的 PrePosition = InsertNode ; 改为 PrePosition->next = InsertNode ;
user-0 提问: codeblocks的错误

回复:
user: user-1
content: 把 360等安全软件关里试试，还有就是在 D盘或者E盘  先建立一个一个 mycpp目录，把项目保存在子目录里

user: user-2
content: 文件属性在哪看？

user: user-3
content: 看下你文件的属性里是否勾了只读属性
user-0 提问: C   	//将文件所有记录读到数组中，一次读一条记录。请将fread补充完整

回复:
user: user-1
content: fread用法参看；http://www.cplusplus.com/reference/cstdio/fread/

user: user-1
content: while(fread(&stuArray[COUNT], sizeof(stuArray[COUNT]) , 1, fp) !=0 )
user-0 提问: 请问关于动态链接与静态链接的一个差别？

回复:
user: user-1
content: 因为，运行时库中有，malloc 和free 的实现代码 如果，DLL中静态链接 运行时库，exe 也静态链接 运行时库 ， 那么程序运行时，就会有两份运行时库代码。 他们各自管理各自的内存分配逻辑。 不同模块的内存分配，必须互相匹配，不然就张冠李戴，互相干扰，导致内存管理出错。

user: user-2
content: fread用法参看；http://www.cplusplus.com/reference/cstdio/fread/

user: user-2
content: 请看这个贴，看完楼主就明白了：http://bbs.csdn.net/topics/390712522

user: user-3
content: 强烈建议楼主不要这么干！！ 我觉得有几点需要注意的： 1、不要跨dll分配释放内存 2、动态库接口，不要出现任何stl的东西
user-0 提问: 出于兴趣，新编写了一个象棋程序

回复:
user: user-1
content: 另外楼主可以看下这个：http://www.oschina.net/code/snippet_2313499_48694 虽然是用JAVA写的，楼主可以参照他来实现在控制台下显示出子的名字

user: user-1
content: 控制台下的象棋，你可以考虑一个坐标点用两个字节表示，有子的位置直接输出子的名字（车、马、炮），没子的地方可以输出■或两个空格之类  之后楼主可以做成有界面的，不过要做界面又要学好多东西了，加油哈

user: user-2
content: 楼主可以了解一下EasyX，最简单的图形界面编程。
user-0 提问: mac下安装libusb问题

回复:
user: user-0
content: 引用 2 楼 bzyhd 的回复:引用 1 楼 yuelengdihai 的回复:来个回复结贴 了不懂，帮不了你 已经解决了  散分

user: user-1
content: 引用 1 楼 yuelengdihai 的回复:来个回复结贴 了不懂，帮不了你

user: user-0
content: 来个回复结贴 了
user-0 提问: 这算不算重复包含？

回复:
user: user-1
content: 包含源文件是比较少见的情况， 一般是处理内联, 模板等情况， 这种情况为了避免一些问题会将 后缀名改为inc等后缀, vs是个傻瓜式的IDE, 默认会将所有源文件进行编译.
user-0 提问: 大一程序猿，求解一个你们肯定会的程序设计

回复:
user: user-1
content: double sinx(double xdec) {     auto x=xdec/180*acos(-1.0);     auto ans=0.0, dx=x,x2=x*x;     int sign=1,deno=1;     while(dx>0.00001){         if(sign&1) ans+=dx;         else ans -=dx;         sign ^=1;         dx *=x2;         dx /=++deno;         dx /=++deno;     }     return ans; }

user: user-2
content: 貌似上学的时候也见过,但是忘了怎么做了...只能默默帮顶.....
user-0 提问: 新手问舍位和上溢

回复:
user: user-1
content: 浮点数转换为整数时候，上溢的时候 有的编译器，会置为最大（最小）可表示数字 有的编译器，会采用截取法  整型之间的转换，一般都是截取法 如果需要置为最大（最小）可表示数字，需要自行编码处理。，  另外，常量溢出，应该不同编译器，处理方式不同。 没看标准，不敢乱猜

user: user-2
content: 比如你做加法后，结果用的原来的类型已经存储不下了，就发生上溢了，高位的数据就丢失了，同样减法就会发生下溢 比如一个字节如果表示无符号，范围是0-128，有符号是-128-127，同理其他

user: user-3
content: 百度搜
user-0 提问: 新手请高手赐教简单的问题

回复:
user: user-1
content: GDB常用命令 调用gdb编译需要在cc后面加 -g参数再加-o； [root@redhat home]#gdb 调试文件：启动gdb (gdb) l ：（字母l）从第一行开始列出源码 (gdb) break n :在第n行处设置断点 (gdb) break func：在函数func()的入口处设置断点 (gdb) info break： 查看断点信息 (gdb) r：运行程序 (gdb) n：单步执行 (gdb) c：继续运行 (gdb) p 变量 ：打印变量的值 (gdb) bt：查看函数堆栈 (gdb) finish：退出函数 (gdb) shell 命令行：执行shell命令行 (gdb) set args 参数:指定运行时的参数 (gdb) show args：查看设置好的参数 (gdb) show paths:查看程序运行路径；            set environment varname [=value] 设置环境变量。如：set env USER=hchen；             show environment [varname] 查看环境变量； (gdb) cd 相当于shell的cd; (gdb)pwd ：显示当前所在目录 (gdb)info program： 来查看程序的是否在运行，进程号，被暂停的原因。 (gdb)clear 行号n：清除第n行的断点 (gdb)delete 断点号n：删除第n个断点 (gdb)disable 断点号n：暂停第n个断点 (gdb)enable 断点号n：开启第n个断点 (gdb)step：单步调试如果有函数调用，则进入函数；与命令n不同，n是不进入调用的函数的 list ：简记为 l ，其作用就是列出程序的源代码，默认每次显示10行。 list 行号：将显示当前文件以“行号”为中心的前后10行代码，如：list 12 list 函数名：将显示“函数名”所在函数的源代码，如：list main list ：不带参数，将接着上一次 list 命令的，输出下边的内容。 注意 ：如果运行list 命令得到类似如下的打印，那是因为在编译程序时没有加入 -g 选项： (gdb) list 1       ../sysdeps/i386/elf/start.S: No such file or directory.         in ../sysdeps/i386/elf/start.S run：简记为 r ，其作用是运行程序，当遇到断点后，程序会在断点处停止运行，等待用户输入下一步的命令。 回车：重复上一条命令。 set args：设置运行程序时的命令行参数，如：set args 33 55 show args：显示命令行参数 continue：简讯为 c ，其作用是继续运行被断点中断的程序。 break：为程序设置断点。 break 行号：在当前文件的“行号”处设置断点，如：break  33 break 函数名：在用户定义的函数“函数名”处设置断点，如：break cb_button info breakpoints：显示当前程序的断点设置情况 disable breakpoints Num：关闭断点“Num”，使其无效，其中“Num”为 info breakpoints 中显示的对应值 enable breakpoints Num：打开断点“Num”，使其重新生效 step：简记为 s ，单步跟踪程序，当遇到函数调用时，则进入此函数体（一般只进入用户自定义函数）。 next：简记为 n，单步跟踪程序，当遇到函数调用时，也不进入此函数体；此命令同 step 的主要区别是，step 遇到用户自定义的函数，将步进到函数中去运行，而 next 则直接调用函数，不会进入到函数体内。 until：当你厌倦了在一个循环体内单步跟踪时，这个命令可以运行程序直到退出循环体。 finish： 运行程序，直到当前函数完成返回，并打印函数返回时的堆栈地址和返回值及参数值等信息。 stepi或nexti：单步跟踪一些机器指令。 print 表达式：简记为 p ，其中“表达式”可以是任何当前正在被测试程序的有效表达式，比如当前正在调试C语言的程序，那么“表达式”可以是任何C语言的有效表达式，包括数字，变量甚至是函数调用。 print a：将显示整数 a 的值 print ++a：将把 a 中的值加1,并显示出来 print name：将显示字符串 name 的值 print gdb_test(22)：将以整数22作为参数调用 gdb_test() 函数 print gdb_test(a)：将以变量 a 作为参数调用 gdb_test() 函数 bt：显示当前程序的函数调用堆栈。 display 表达式：在单步运行时将非常有用，使用display命令设置一个表达式后，它将在每次单步进行指令后，紧接着输出被设置的表达式及值。如： display a watch 表达式：设置一个监视点，一旦被监视的“表达式”的值改变，gdb将强行终止正在被调试的程序。如： watch a kill：将强行终止当前正在调试的程序 help 命令：help 命令将显示“命令”的常用帮助信息 call 函数(参数)：调用“函数”，并传递“参数”，如：call  gdb_test(55) layout：用于分割窗口，可以一边查看代码，一边测试： layout src：显示源代码窗口 layout asm：显示反汇编窗口 layout regs：显示源代码/反汇编和CPU寄存器窗口 layout split：显示源代码和反汇编窗口 Ctrl + L：刷新窗口 quit：简记为 q ，退出gdb 当然，gdb的功能远不止这些，包括多进程/多线程/信号/远程调试等功能在这里均没有提及，有需要的读者可以参考其它信息 本文来自CSDN博客，转载请标明出处：http://blog.csdn.net/pizi0475/archive/2011/03/08/6232749.aspx
user-0 提问: 问题：error=/tmp/liboop.so: undefined symbol: OOPServer_Init!

回复:
user: user-1
content: http://www.2cto.com/kf/201205/131979.html

user: user-0
content: 希望有高人能指点

user: user-0
content: 希望有高人能指点

user: user-0
content: 希望有高人能指点
user-0 提问: 请教大神，如果a=5,为什么++a+a++=13？不应该是12吗？ 

回复:
user: user-1
content: 引用 26 楼 Chen8013 的回复:象这样令人费解、并且会有歧义的代码，有多大的意义！！！  Kill time.

user: user-2
content: 象这样令人费解、并且会有歧义的代码，有多大的意义！！！

user: user-3
content: 我错了，通过程序验证应该是12

user: user-4
content: 一句话，不要在一个完整的表达式之内对一个变量进行多次引用，即顺序点之间实现修改，其结果不能保证。不要写这种语句，也不要纠结这种语句。一个编译器一直理解，换个编译器说不定等于12

user: user-5
content: 跟编译器有关。我觉得没什么可以纠结的。平时写代码也不会这么写。要不然你平时用vs2013 突然让你用vs2008 搞不好就会出错了。平时尽量用通用性强的语法更好

user: user-6
content: ++a+a++=13 谁要敢在实际工程中写这种代码,我直接一砖头拍过去,还有必要讨论吗?

user: user-7
content: 引用 14 楼 lm_whales 的回复:++ a  这个表达式取 a自增后的值，但是这个值未必立即取，如果a 继续变化，取变化后的值，也和自增后不矛盾  所以这个表达式 是这么计算的  ++ a ；前缀运算符++ //a=6 a++ ; 后缀运算符 ++；a++这是最后一个子表达式，取 a 的当前值 a=6, 此后 a=7 然后，计算 +这个运算  ++a + a++  ///++a这个子表达式 值为 a 的值7(自增后的值) 7+ 6 =13；  这个表达式 =11，12，13 都对，没什么不可理解的 这在C++11 以前，是顺序点问题。 在这以后，顺序点被废弃， 新的提法大家还没有熟悉， 但是本质上是一样的 c++14 n4296 1.9 Program execution 15 Except where noted, evaluations of operands of individual operators and of subexpressions of individual expressions are unsequenced. [ Note: In an expression that is evaluated more than once during the execution of a program, unsequenced and indeterminately sequenced evaluations of its subexpressions need not be performed consistently in different evaluations. — end note ] The value computations of the operands of an operator are sequenced before the value computation of the result of the operator. If a side effect on a scalar object is unsequenced relative to either another side effect on the same scalar object or a value computation using the value of the same scalar object, and they are not potentially concurrent (1.10), the behavior is undefined.

user: user-7
content: 引用 15 楼 lm_whales 的回复:置顶帖，被弃，因为顺序点的概念被废弃， 新的和置顶帖有同样效果的帖子，还没人去写。  http://blog.csdn.net/fefe82/article/details/37833767  不足之处，还望指正。

user: user-1
content: “应该”和“实操”之间永远是有区别的。 谁见过现实世界中发生过1+1=2？

user: user-8
content: 我要分   求积分

user: user-9
content: however，关注更有效的技能的好，比如反汇编。

user: user-10
content: 置顶帖，被弃，因为顺序点的概念被废弃， 新的和置顶帖有同样效果的帖子，还没人去写。

user: user-10
content: ++ a  这个表达式取 a自增后的值，但是这个值未必立即取，如果a 继续变化，取变化后的值，也和自增后不矛盾  所以这个表达式 是这么计算的  ++ a ；前缀运算符++ //a=6 a++ ; 后缀运算符 ++；a++这是最后一个子表达式，取 a 的当前值 a=6, 此后 a=7 然后，计算 +这个运算  ++a + a++  ///++a这个子表达式 值为 a 的值7(自增后的值) 7+ 6 =13；  这个表达式 =11，12，13 都对，没什么不可理解的 这在C++11 以前，是顺序点问题。 在这以后，顺序点被废弃， 新的提法大家还没有熟悉， 但是本质上是一样的

user: user-11
content: 为啥我算的是12呢

user: user-3
content: 先执行++a，此时a=6，再执行a++，a++=7，但此时a仍然等于6，所以结果是6+7=13

user: user-1
content: 引用 20 楼 fefe82 的回复:[quote=引用 15 楼 lm_whales 的回复:] 置顶帖，被弃，因为顺序点的概念被废弃， 新的和置顶帖有同样效果的帖子，还没人去写。  http://blog.csdn.net/fefe82/article/details/37833767  不足之处，还望指正。[/quote] 收藏到本ID的常用复制粘贴库中。

user: user-12
content: n=5; ++n使n变成了6, +(n++) 这里的(n++)在计算中为7,输出的结果是6.

user: user-1
content: 莫非是时间这把杀猪刀？

user: user-1
content: 引用 5 楼 lovesmiles 的回复:看置顶贴 看置顶贴 看置顶贴  不看置顶贴就来问++的问题，简直是新人找骂来的。 问题是不知哪只幕后黑手将此经典置顶贴给kill了！

user: user-13
content: 看置顶贴 看置顶贴 看置顶贴  不看置顶贴就来问++的问题，简直是新人找骂来的。
user-0 提问: 用栈做的进制转换程序，为什么输出停不下来啊一直是4206655

回复:
user: user-1
content: 如下修改2行：  Status StackEmpty(SqStack *S){//判断栈是否为空   return((*S).top==(*S).base);//改 return((*S).top==0); } Status Pop(SqStack *S,SElemType *e){   if((*S).top==(*S).base)return ERROR;   (*S).top--;   *e=*((*S).top); //改 e=(*S).top;   return OK; }
user-0 提问: 除零错误！！！错在那啊，找不到

回复:
user: user-1
content: while (z != 0) { y1 = z; x1 = y1; z = x1%y1; } 这里错误，x1=y1=z

user: user-2
content: 关于自己是否适合编程的很简单的测试： 在报纸或杂志上随便找一段约1000字的文章，在Word中输入一遍。输完后再参考下面答案：  A里面有10处以上文字或标点错误 B里面没有文字或标点错误并敢为此跟人打赌 C里面没有文字或标点错误并且字体和排版完全与原稿一致 D打印在半透明的纸上和原稿重叠在一起检查一模一样，且自我感觉很有成就感  A不适合编程（理由：打字准确度偏低、粗心大意） B初级程序员（理由：打字准确度很高、认真细致、自信、理解全角半角概念） C高级程序员（理由：在B的基础上理解字体和排版也是电脑打印的重要因素、但相比D还不够偏执、精益求精、结果可验证） D软件项目经理（理由：能针对项目给出令人信服的细致到极点的需求说明和典型测试用例。用户几乎挑不出毛病。专业！）  如果想从A变成B的话，到我的资源http://download.csdn.net/detail/zhao4zhong1/4084259里面下载“适合程序员的键盘练习”

user: user-3
content: if(a--0)括号里面应该是逻辑判断 a==0之类的
user-0 提问: 有关poj1002的问题，可以AC但编译器通过不了

回复:
user: user-1
content: 源代码扩展名是.c还是.cpp区别还是蛮大的。

user: user-2
content: 看得有点晕, AC了你说通不过编译, 强转后可以编译, 又得到CE, 到底有没有AC

user: user-0
content: 那qsort(phone, n, 9,strcmp)中不是缺少第三个参数（每个元素的字节数，用于交换数据）吗？ 这个9不是还是数组的信息吗？

user: user-3
content: C语言标准库函数 qsort  第一个参数，是数组首地址， 第二个参数，是元素个数，这开头两个参数，是待排序数组信息。 第三个参数是，每个元素的字节数，用于交换数据。 第四个参数是，比较函数，用于比较大小。

user: user-0
content: 奇怪了，昨天明明编译出错今天突然通过了。那么请问一下： qsort的二维数组排序不应该是这样的吗？ qsort(a,1000,sizeof(int)*2,comp); int comp(const void*a,const void*b) {     return((int*)a)[0]-((int*)b)[0]; } 为什么qsort(phone, n, 9,strcmp)也行？ 还有绿色部分是什么意思？
user-0 提问: 关于指针数组的一点疑惑

回复:
user: user-0
content: @fefe82 一语中的啊。 thanks

user: user-1
content: printf的%s不支持nullptr空指针吧

user: user-2
content: 引用 2 楼 suseyaoyao 的回复:@user-3 我问的不是这个啊。。 我是指段错误。为什么会有段错误  访问空指针就会段错误啊

user: user-0
content: @user-3 我问的不是这个啊。。 我是指段错误。为什么会有段错误

user: user-3
content: pch[5]是空啊，数组初始化时，如果元素少于个数时，后面会被初始化为0 你pch[6]有六个元素， {"妹","妹","你","别","走"} 只有五个，所以最后一个初始为0，所以就显示(Null)了 就比如你写int a[5] = {1,2,3};   那么a中的值为 1 2 3 0 0
user-0 提问: C语言如何导入C++文件头

回复:
user: user-1
content: 你包含的时候include的路径错了. 你可以这样写:include"/***/***/*.h"就是include进去绝对路径. 或者你的*.cpp文件在你的*.h文件同一个路径下就这样写:include"./*.h". --- 总的来说:你在你*.cpp文件路径下,可以打开*.h的路径就是include应该包含的路径. 再比如:你的*.h文件在include目录下,*.cpp文件在src目录下.同时include和src目录在同一个目录下,此时你应该这样写: ../include/*.h 既 ../ 找到上一级目录,然后进入include目录,然后定位到你的h文件. 说的比较绕口,希望你可以看明白. 你在一楼列出来的写法肯定是找不到的.

user: user-0
content: 引用 5 楼 FreeMyself 的回复:你用的什么编译器，你用的什么平台，还有看样子不像标准C/C++。在Linux下使用makefile进行程序编译的，主要用C语言写的，最近需要使用一个C++的.so库

user: user-2
content: 你用的什么编译器，你用的什么平台，还有看样子不像标准C/C++。

user: user-3
content: http://zhidao.baidu.com/link?url=s4MaIjZu_BJTdLdWxxk3dS8XOw1Plr12T_2aDHKch-wqFqmsm_HN52ilS8lIA9IWiQcYiKwoPf92SDgE9APVrK

user: user-3
content: http://zhidao.baidu.com/link?url=s4MaIjZu_BJTdLdWxxk3dS8XOw1Plr12T_2aDHKch-wqFqmsm_HN52ilS8lIA9IWiQcYiKwoPf92SDgE9APVrK

user: user-0
content: 求教求教求教

user: user-0
content: 求教求教求教
user-0 提问: C语言中函数形参和实参问题    向各位大神求助！

回复:
user: user-1
content: 实参只有被调用的时候，才称为实参，其它时候都是形参。

user: user-2
content: 实参是表达式，理论上未必有地址。 形参才是变量，不过形参是函数的调用者，准备的无名变量，准备好以后，开始调用被调函数。， 被调函数执行时，形参才成为了真正 的有名变量。 函数调用结束，形参名字又看不见了。

user: user-3
content: 形参是对数据结构的重定义,实参是数据的一次真实写照!!!!!!!!!!

user: user-4
content: 形参是啥？ 实参是啥？  理解他们的定义你就知道他们为什么可以不同名了，因为他们本来就是不同的东西。 实参传递入函数内部时，是被复制一遍赋值给形参的。

user: user-5
content: 不要相信监视窗口这么不可靠的东西。

user: user-6
content: 形参只是类型相同，实参传的是地址，修改的是地址所指的内容

user: user-7
content: 写了几年, 都忘记啥叫形参, 啥叫实参了
user-0 提问: 要求从键盘输入的100个数中最大的质数是多少

回复:
user: user-1
content: #include<stdio.h>   int main() { 	int a[10]; 	int b[10]; 	int i, 		j, 		max; 	int h=0; 	int t=0;  	for(i=0;i<10;i++) 	{ 		scanf_s("%d",&a[i]); 	}  	for(i=0;i<10;i++) 	{ 		for(j=2;j<a[i];j++) 		{ 			if(a[i]%j==0)   //检验所有的数不能除，便是质数 			{ 				t++; 				break; 			} 		} 		if(0==t)   //是质数，保存到b 		{ 			b[h]=a[i]; 			h++; 		} 		else 		{ 			t=0;  //不是质数，t清零，进行下一次 		} 	} 	max=b[0]; 	for(;h>=0;h--) 	{ 		if(max<b[h])	 		{ 			max=b[h]; 		} 	} 	printf("%d\n",max); 	return 0; }

user: user-2
content: 我没电脑，明天早上发给你，几点交？

user: user-2
content: 你的else里面的语句不对，不一定能存10个
user-0 提问: 大牛快来帮我啊，写了一个程序，检测没问题，运行就直接挂掉了，怎么回事啊

回复:
user: user-1
content: static student s[1000]; static student ne[1000]; 在占用内存空间较大的局部数组声明的前面加static将其从堆栈数据段挪到全局数据段即可避开因局部数组大小超过默认堆栈大小1MB造成程序不能正常运行的问题。

user: user-0
content: 引用 2 楼 user-2 的回复:测试数据是什么 Sample Input   4 5 25 10 10 12 13 15 CS004 3 5 1 3 CS003 5 2 4 1 3 5 CS002 2 1 2 CS001 3 2 3 5 1 2 40 10 30 CS001 1 2 2 3 20 10 10 10 CS000000000000000001 0 CS000000000000000002 2 1 2 0         Sample Output   3 CS003 60 CS001 37 CS004 37 0 1 CS000000000000000002 20

user: user-2
content: 测试数据是什么

user: user-0
content: 怎么没人来啊
user-0 提问: c语言自定义函数

回复:
user: user-1
content: int main()//这个就是自定义函数 {     printf("");//这个就是库函数 }

user: user-2
content: 可以调用，直接调用就好。

user: user-3
content: 引用 2 楼 WeSdFgVs 的回复:[quote=引用 1 楼 动力风暴的回复:]当然可以啊~~~~~ 库函数也是函数。 那怎么调用？合法嘛？[/quote]   void  a() {           strcpy(...);  //库函数 }  建议楼主先看书，这些很基础的东西，否则学起来会很痛苦的

user: user-0
content: 引用 1 楼 动力风暴的回复:当然可以啊~~~~~ 库函数也是函数。 那怎么调用？合法嘛？

user: user-4
content: 当然可以啊~~~~~ 库函数也是函数。
user-0 提问: SendMessage (hwndEdit, EM_LIMITTEXT, 32000, 0L)中的0L是什么意思？

回复:
user: user-1
content: C++ Integer Constants Integer constants are constant data elements that have no fractional parts or exponents. They always begin with a digit. You can specify integer constants in decimal, octal, or hexadecimal form. They can specify signed or unsigned types and long or short types.  Syntax  integer-constant :  decimal-constant integer-suffixopt octal-constant integer-suffixopt hexadecimal-constant integer-suffixopt 'c-char-sequence'  decimal-constant :  nonzero-digit decimal-constant digit  octal-constant :  0 octal-constant octal-digit  hexadecimal-constant :  0x hexadecimal-digit 0X hexadecimal-digit hexadecimal-constant hexadecimal-digit  nonzero-digit : one of  1 2 3 4 5 6 7 8 9  octal-digit : one of  0 1 2 3 4 5 6 7  hexadecimal-digit : one of  0 1 2 3 4 5 6 7 8 9 a b c d e f A B C D E F  integer-suffix :  unsigned-suffix long-suffixopt long-suffix unsigned-suffixopt  unsigned-suffix : one of  u U  long-suffix : one of  l L  64-bit integer-suffix :  i64  To specify integer constants using octal or hexadecimal notation, use a prefix that denotes the base. To specify an integer constant of a given integral type, use a suffix that denotes the type.  To specify a decimal constant, begin the specification with a nonzero digit. For example:  int i = 157;   // Decimal constant int j = 0198;  // Not a decimal number; erroneous octal constant int k = 0365;  // Leading zero specifies octal constant, not decimal  To specify an octal constant, begin the specification with 0, followed by a sequence of digits in the range 0 through 7. The digits 8 and 9 are errors in specifying an octal constant. For example:  int i = 0377;   // Octal constant int j = 0397;   // Error: 9 is not an octal digit  To specify a hexadecimal constant, begin the specification with 0x or 0X (the case of the “x” does not matter), followed by a sequence of digits in the range 0 through 9 and a (or A) through f (or F). Hexadecimal digits a (or A) through f (or F) represent values in the range 10 through 15. For example:  int i = 0x3fff;   // Hexadecimal constant int j = 0X3FFF;   // Equal to i  To specify an unsigned type, use either the u or U suffix. To specify a long type, use either the l or L suffix. For example:  unsigned uVal = 328u;             // Unsigned value long lVal = 0x7FFFFFL;            // Long value specified                                    //  as hex constant unsigned long ulVal = 0776745ul;  // Unsigned long value

user: user-2
content: 这个参数没用到，随便传一个数

user: user-3
content: msdn中 搜下EM_LIMITTEXT SendMessage(    (HWND) hWnd,        // handle to destination window    EM_LIMITTEXT,       // message to send   (WPARAM) wParam,    // text length   (LPARAM) lParam     // not used; must be zero );

user: user-4
content: long 类型常量 0  long 后缀为,l, L，  float 后缀是 f int ,double 不需要后缀 long double 后缀也是L long long 后缀是 ll，LL unsigned long long 后缀是 ULL，ull,也有编译器 支持 llu,LLU， unsigned 后缀是 U,u
user-0 提问: 多线程双线链表实现贪食蛇蛇身不长

回复:
user: user-1
content: https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=%E5%A4%9A%E7%BA%BF%E7%A8%8B%20%E5%8F%8C%E5%90%91%E9%93%BE%E8%A1%A8%20%E8%B4%AA%E5%90%83%E8%9B%87&oq=V%26lt%3B%2BSQL%E7%9A%84%E6%B1%BD%E8%BD%A6%E8%B0%83%E5%BA%A6%E7%AE%A1%E7%90%86%E7%B3%BB%E7%BB%9F&rsv_pq=e8e46d08000a60c5&rsv_t=6647pTDhqJcrsj6sa2%2BEnZwndRf5%2B28UYOTeOpz%2F7AH%2FLwzrlb6X%2BveJtrk&rsv_enter=0&inputT=75135&rsv_sug3=47&rsv_sug1=27&bs=VC%2BSQL%E7%9A%84%E6%B1%BD%E8%BD%A6%E8%B0%83%E5%BA%A6%E7%AE%A1%E7%90%86%E7%B3%BB%E7%BB%9F
user-0 提问: 关于随机函数，求解释

回复:
user: user-1
content: 因为 time 求得的时间粒度太大 你多次调用同一个函数，时间还没来得及变化。 结果是每次产生同一个序列 随机数发生器，是一种遍历一定范围整数 的算法 似乎应该叫，伪随机序列生成器。 我所说的同一程序，两次执行， 指的是 生成的可执行文件。 执行两次， 由于时间差太小，以至于看到的结果相同。 time 似乎是秒级的

user: user-2
content: 引用 11 楼 MicroPDA 的回复:[quote=引用 9 楼 u012956540 的回复:] 函数执行结束，随机种子会被销毁。 相当于随机种子被重置了。 既然种子被重置，又是以时间做的种子，那么随机值不是更应该不同么？为啥会相同呢？[/quote]  time（）的时间默认是以秒为单位的。两次执行的时间间隔太短，随机种子会相同。 代码示例： #include <ctime> #include <cstdio> #include <windows.h> int main() { 	int length = 10; 	for(int i = 0; i < length; i++) 	{ 		__int64 out = time(NULL); 		printf("%ld\n", out); 		Sleep(500); //注释这一句对照运行下 	} 	return 0; }  有关time函数的说明，请见：http://www.cplusplus.com/reference/ctime/time/?kw=time

user: user-0
content: 我用循环调用10W次h()函数测试，果然是时间太短的缘故！谢谢各路大神！

user: user-0
content: 引用 7 楼 lm_whales 的回复:srand((signed)time(NULL))； 应该在所有调用随机数的表达式执行之前，执行。 一般写在 main 开头就可以了 当然，这不能避免，同一程序两次执行生成相同的随机数序列。就想知道两次执行，而且是不同时刻的两次执行为什么生成的随机数序列是相同的呢？

user: user-0
content: 引用 10 楼 baidu_32513371 的回复:嗯，对的，这就是根据时间来决定的，时间太短，值一样  试了函数里面加语句增加运行时间，或者主函数调用函数次数增加到20000，值还是不变，应该不是时间短的问题耶

user: user-0
content: 引用 9 楼 u012956540 的回复:函数执行结束，随机种子会被销毁。 相当于随机种子被重置了。 既然种子被重置，又是以时间做的种子，那么随机值不是更应该不同么？为啥会相同呢？

user: user-3
content: 嗯，对的，这就是根据时间来决定的，时间太短，值一样

user: user-2
content: 函数执行结束，随机种子会被销毁。 相当于随机种子被重置了。

user: user-4
content: 引用 6 楼 ID870177103 的回复:[quote=引用 5 楼 github_27756899 的回复:] srand((signed)time(NULL)); srand()函数赋的值不一样;  你觉得运行这段程序要多久？[/quote] 很短时间(signed)time(NULL)的值一样。  楼主你可以考虑一下每次调用时改变srand()中的值。

user: user-1
content: srand((signed)time(NULL))； 应该在所有调用随机数的表达式执行之前，执行。 一般写在 main 开头就可以了 当然，这不能避免，同一程序两次执行生成相同的随机数序列。

user: user-5
content: 引用 5 楼 github_27756899 的回复:srand((signed)time(NULL)); srand()函数赋的值不一样;  你觉得运行这段程序要多久？

user: user-4
content: srand((signed)time(NULL)); srand()函数赋的值不一样;

user: user-0
content: 引用 2 楼 ID870177103 的回复:因为你每次产生随机数的时候，都重新调用srand每次重新调用产生的随机数都会是一样的？

user: user-6
content: 在一次运行的时候只调用一次 srand

user: user-5
content: 因为你每次产生随机数的时候，都重新调用srand

user: user-7
content: srand一般实现比较简陋, 这是微软的实现: // Seeds the random number generator with the provided integer. extern "C" void __cdecl srand(unsigned int const seed) {     __acrt_getptd()->_rand_state = seed; }  // Returns a pseudorandom number in the range [0,32767]. extern "C" int __cdecl rand() {     __acrt_ptd* const ptd = __acrt_getptd();      ptd->_rand_state = ptd->_rand_state * 214013 + 2531011;     return (ptd->_rand_state >> 16) & RAND_MAX; }  可以看出srand基本就是一个赋值操作
user-0 提问: 已经#define 一个参数，把他用在一个函数前面是什么意思

回复:
user: user-1
content: 方便统一定义接口函数特性。

user: user-2
content: 编译时将替换为空，通常这么做是为了让你清楚这个函数是个什么类型的，比如你这个可能是想说是MAC_INTERNAL的API函数，仅此而矣

user: user-3
content: 这个替换之后就是一个空串啊

user: user-4
content: 无意义，好看。
user-0 提问: c语言 想写个贪吃蛇，如何实现蛇身自己边长，求高人指点下。

回复:
user: user-1
content: 早上试了一下，贪吃蛇可以用一个vector来存储蛇身，每次移动的时候，在vector头部插入新的蛇头，删除蛇尾，然后根据vector更新画面（只要更新新蛇头和旧蛇尾画面就可以了）

user: user-0
content: 引用 1楼user-4 的回复:用链表写____stl也行百度了下链表 好像可以 研究下

user: user-1
content: 方块的随机出现位置可以用两次rand()函数得到随机的行坐标和列坐标，rand()之前可以用srand()初始化。 楼主可以的

user: user-1
content: 定时器到了准备移动，如果下一次的蛇头位置为墙壁（3）或者为蛇身（1），Game Over。

user: user-2

user: user-1
content: 引用 5 楼 u010165006 的回复:[quote=引用 4 楼 u010165006 的回复:] 贪吃蛇的位置可以定义为二维数组里面的1，空的位置为0，方块的位置为2，吃掉方块以后尾巴添加一个1，方块的位置也改变为1（因为处于蛇身），每次刷新显示的时候根据贪吃蛇位置的数据来画。 每次刷新显示的时候多画一个蛇头，蛇尾用背景画没掉。 主要的是吃掉方块尾巴添加在哪个方向，一般添加的尾巴和原来尾巴的两个方块一条直线，或者尾巴添加在上一次移动蛇身前的尾巴位置。[/quote] 另外用5个变量来存储蛇头位置、蛇尾位置、上一次蛇尾位置、移动方向、下一次蛇头位置，蛇移动的时候如果蛇头位置等于随机的方块位置就吃掉方块，在上一次蛇尾位置添加蛇尾。其实这里还可以优化。

user: user-1
content: 引用 4 楼 u010165006 的回复:贪吃蛇的位置可以定义为二维数组里面的1，空的位置为0，方块的位置为2，吃掉方块以后尾巴添加一个1，方块的位置也改变为1（因为处于蛇身），每次刷新显示的时候根据贪吃蛇位置的数据来画。 每次刷新显示的时候多画一个蛇头，蛇尾用背景画没掉。 主要的是吃掉方块尾巴添加在哪个方向，一般添加的尾巴和原来尾巴的两个方块一条直线，或者尾巴添加在上一次移动蛇身前的尾巴位置。

user: user-3
content: 搜“贪吃蛇 C语言源代码”

user: user-1
content: 贪吃蛇的位置可以定义为二维数组里面的1，空的位置为0，方块的位置为2，吃掉方块以后尾巴添加一个1，方块的位置也改变为1（因为处于蛇身），每次刷新显示的时候根据贪吃蛇位置的数据来画。

user: user-4
content: 用链表写____stl也行

user: user-4
content: 用链表写____stl也行
user-0 提问: 将程序隐藏到后台运行[C语言]

回复:
user: user-1
content: http://www.nirsoft.net/utils/nircmd.html

user: user-2
content: 你是要让你写的程序自己隐藏 还是 用你的程序隐藏别的程序  前者参看：http://www.cnblogs.com/syxchina/archive/2010/12/14/2197274.html 后者的话还有点麻烦需要发消息给那个程序

user: user-3
content: FindWindow ShowWindow

user: user-4
content: 输出也要处理掉

user: user-4
content: 写个批处理程序加载批处理即可，前提是不要有输入，有的话也要处理掉，不然看控制台还会暴露的

user: user-5
content: 不创建控制台程序就行了
user-0 提问: 我是新人，初发帖希望有人能告诉我这段代码是什么意思

回复:
user: user-0
content: 我希望能帮我理下思路，我就很感谢了

user: user-0
content: //这是G://inputdata.txt文件内容，我忘打了，抱歉  3 3 4 0 0 3 4 1 0 3 4 1 1

user: user-1
content: 看起来是个数学计算题，求什么内容没看明白
user-0 提问: 自己写.h文件，在.c中调用时出错

回复:
user: user-0
content: 把文件改了一下 lianbiao.h #ifndef _lianbiao_h #define _lianbiao_h  #include<stdio.h> #include<stdlib.h> typedef struct LNODE  { int data; struct LNODE *next; }*linlist，lnode; .......函数声明 #endif ------------------------------------------------------------------ lianbiao.c  linklist L; .............。h中声明的函数的定义   ---------------------------------------------------------------------- main.c #include"lianbiao.h" #include<stdio.h> int main()  { linklist L; `````` return 0; }  这次又出现了错误：main。c中“L"未声明；                                   lianbiao。c中 未知的类型名”linklist“

user: user-0
content: 引用 2 楼 fefe82 的回复:extern struct LNODE *linklist ,lnode;  你是不是想写  teypedef struct LNODE *linklist ,lnode; 我是想在lianbiao.h中声明结构体，然后在lianbiao.c中定义结构体变量。 我把.h中的改了，改成typedef struct LNODE{}*linklist； 然后想在linklist.c中定义一个结构体变量L，在main.c中直接就可以用了····

user: user-0
content: 引用 1 楼 ipqtjmqj 的回复:linklist 是个变量，又不是类型。 一语惊醒，已解决，谢谢。

user: user-1
content: extern写在函数外面

user: user-2
content: extern struct LNODE *linklist ,lnode;  你是不是想写  teypedef struct LNODE *linklist ,lnode;

user: user-3
content: linklist 是个变量，又不是类型。

user: user-4
content: 引用 6 楼 ziyuxuan7177 的回复:把文件改了一下 lianbiao.h #ifndef _lianbiao_h #define _lianbiao_h  #include<stdio.h> #include<stdlib.h> typedef struct LNODE  { int data; struct LNODE *next; }*linlist，lnode; .......函数声明 #endif ------------------------------------------------------------------ lianbiao.c  linklist L; .............。h中声明的函数的定义   ---------------------------------------------------------------------- main.c #include"lianbiao.h" #include<stdio.h> int main()  { linklist L; `````` return 0; }  这次又出现了错误：main。c中“L"未声明；                                   lianbiao。c中 未知的类型名”linklist“ linklist你未定义，h文件中单词拼错了，注意细节
user-0 提问: 想了解C语言程序内存怎么分配的，需要看哪些资料？

回复:
user: user-1
content: VMMap 是进程虚拟和物理内存分析实用工具。http://technet.microsoft.com/zh-cn/sysinternals/dd535533

user: user-1
content: 参考Linux源代码中加载可执行文件相关片断。

user: user-2
content: 直接看标准吧

user: user-3
content: 看下这两篇博文就基本明白了  http://blog.csdn.net/gytanonymous/article/details/7060574 http://www.cnblogs.com/lancidie/archive/2011/08/05/2128318.html

user: user-3
content: 看下这两个贴就大概了解了：   [url=http://www.cnblogs.com/lancidie/archive/2011/08/05/2128318.html][/url]

user: user-4
content: 看汇编吧，不过前期没有必要了解这么深~

user: user-5
content: 百度搜  "C 内存管理"

user: user-6
content: 看操作系统原理。