Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: C程序问题

回复:
user: user-1
content: 没给a有效的地址！  int *a = (int *)malloc(sizeof(int));

user: user-2
content: 你直接使用了未经初始化的野指针，在linux环境里必然段错误。

user: user-3
content: 没有给指针a赋地址，也就是说：*a的内容是不确定的。指针使用前应赋值！

user: user-4
content: #include <stdio.h> #include <stdlib.h> #include <string.h>  int main() { int b = 2;  int *a = &b; printf("%d", *a); return 0; }这样也行。。。

user: user-5
content: a所指向的地址没有分配内存空间

user: user-6
content: int* a; int b; b赋给a的方式： 一、 *a = b； 二、 a = (int)malloc(sizeof(int)); memcpy(a, &b, sizeof(int)); //用完free(a);

user: user-7
content: #include <stdio.h> #include <stdlib.h> #include <string.h>  int main() { int *a = (int*)malloc(sizeof(int)); int b = 2; memcpy(a, &b, sizeof(int)); printf("%d", *a); free(a); return 0; }  引用 楼主 baoyuan24 的回复:#include <stdio.h> #include <stdlib.h> #include <string.h>  int main() { 	int *a; 	int b = 2; 	memcpy(&a, &b, 4); 	printf("%d", *a);  	return 0; } 为什么最后一句printf("%d", *a)会导致段错误？ 以我这样的思路，怎么样改才可以实现将b中的值赋给a的目的？
user-0 提问: 如何将多文件C程序创建为动态链接库？

回复:
user: user-1
content: 引用 6 楼 lm_whales 的回复:1)IDE 直接 建一个DLL工程，添加那些 .c,和一个.def 用来导出函数， 编译即可  2）命令行 编译那些.c ，.def 生成 .obj 连接成 .dll 如果缺少DLLMain  定义一个就是。++

user: user-2
content: VS2010直接 建一个DLL工程

user: user-3
content: 1)IDE 直接 建一个DLL工程，添加那些 .c,和一个.def 用来导出函数， 编译即可  2）命令行 编译那些.c ，.def 生成 .obj 连接成 .dll 如果缺少DLLMain  定义一个就是。

user: user-4
content: 如果有源文件就容易

user: user-5
content: 是多个c程序 还是多个源文件？

user: user-6
content: 我Q空间日志，《写代码学习Windowns编程之动态链接库编程》自己写的，有详细过程及代码 Q:284941821

user: user-7
content: 查MSDN是Windows程序员必须掌握的技能之一。

user: user-8
content: 多个文件和单个文件是一回事，建立一个DLL工程，往里面添加C程序即可，参考http://www.vckbase.com/index.php/wv/1381.html  引用 楼主 u011637030 的回复:请问如何将多文件C程序创建为动态链接库？求相关资料！
user-0 提问: 白痴到了极点的问题，如何删除保存好的程序

回复:
user: user-0
content: 引用 楼主 u012379764 的回复:新手一个，一个编译好的程序如何给删除掉，用的编程软件是Microsoft visual C++，因为里面全是英文的看不懂，找不到删除在哪。拜谢，这个问题纠结我一个月了已经。

user: user-1
content: 点击：Build->Clean 然后重新生成就OK了

user: user-2
content: 点鼠标右键，选删除？ 点鼠标左键，按Del键？

user: user-3
content: 选中要删除的文件名，然后按DELETE键即可。  引用 楼主 u012379764 的回复:新手一个，一个编译好的程序如何给删除掉，用的编程软件是Microsoft visual C++，因为里面全是英文的看不懂，找不到删除在哪。
user-0 提问: 为什么18B20用共阴数码管显示为0而1602能显示

回复:
user: user-1
content: 数码管 和 LCD 的控制方法一样吗？

user: user-2
content: 数码管需分时扫描进行显示。  引用 楼主 dyb920719 的回复:用18B20做实验，18B20+HC573用共阴数码管显示一直为0，但是18B20一样的程序用1602就能显示温度，求解
user-0 提问: 求i输入一个数，判断它的奇偶性，错误在哪里？

回复:
user: user-1
content: 直接用p%2判断它余数为1则是奇数，余数为0则是偶数，干嘛要写那么复杂。

user: user-2
content: 楼主看的啥教材？  函数返回值 竟然全是double？  换本书看看吧！

user: user-3
content: 把double换成int  引用 楼主 u011688498 的回复:我写了代码，但是运行之后输入数字结果不准确，不知道哪里出错了！ 求真实的代码，需不需要把double换成int? 新手求教 #include<stdio.h> double main() { 	double shang(); 	double p; 	p=shang(); 	printf("结果，商是:%d\n",p); 	if(p>=0)       printf("这个数是基数\n"); 	 else       printf("这个数是偶数\n"); 	 return 0; }  double shang() { 	int x,y; 	scanf("%d",&x); 	printf("阁下输入的是：%d\n正在计算....................\n",x); 	y=x%2;     return (y); }

user: user-0
content: 引用 4 楼 sruru 的回复:一点建议，为什么不把参数接手以后传递到函数呢？ int idEvenOdd(int num) {   int result = num /2;   return result; }怎么说？有没有详细的代码？

user: user-0
content: 引用 2 楼 max_min_ 的回复:楼主看的啥教材？  函数返回值 竟然全是double？  换本书看看吧！没人教，都是自己胡打的

user: user-0
content: 引用 3 楼 user-7 的回复:转换太乱套了 在你这个代码中 可以一律用 int可以的吗？？好像商有小数啊

user: user-4
content: 引用 5 楼 yulitingfeng 的回复:#include<stdio.h>  double main()  {      double shang();      double p;      p=shang();      printf("结果，商是:%f\n",p);      if(p<=-0.000001||p>=0.000001) //double 的零值比较问题       printf("这个数是基数\n");       else       printf("这个数是偶数\n");       return 0;  }     double shang()  {      int x,y;      scanf("%d",&x);      printf("阁下输入的是：%d\n正在计算....................\n",x);      y=x%2;      return (y);  }  p 是double类型。与0 比较的方式不对。可以试下修改过的 ++

user: user-5
content: #include<stdio.h>  double main()  {      double shang();      double p;      p=shang();      printf("结果，商是:%f\n",p);      if(p<=-0.000001||p>=0.000001) //double 的零值比较问题       printf("这个数是基数\n");       else       printf("这个数是偶数\n");       return 0;  }     double shang()  {      int x,y;      scanf("%d",&x);      printf("阁下输入的是：%d\n正在计算....................\n",x);      y=x%2;      return (y);  }  p 是double类型。与0 比较的方式不对。可以试下修改过的

user: user-6
content: 一点建议，为什么不把参数接手以后传递到函数呢？ int idEvenOdd(int num) {   int result = num /2;   return result; }

user: user-7
content: 转换太乱套了 在你这个代码中 可以一律用 int
user-0 提问: gdb调试段错误具体方法

回复:
user: user-1
content: 引用 楼主 u012378280 的回复:最让人头痛的是调试的时候出现段错误，要怎样才能找出来？求大神解答！ 段错误，你高清段错误的实质就知道怎么调了。  我用看都能看出来一般，看不出来用消息打印

user: user-2
content: 使用帮助man，有样例，看下各命令

user: user-0
content: 引用 21 楼 zhao4zhong1 的回复:[quote=引用 19 楼 u012378280 的回复:] [quote=引用 16 楼 zhao4zhong1 的回复:]    使用共享内存，编程实现一个进程往共享内存中写数据，另一个进程从共享内存中读取数据这要怎么写？ Linux下不知道。 Windows下参考Microsoft SDK\samples\winbase\SharedMem [/quote]   windows底下怎么操作？

user: user-0
content: [quote=引用 16 楼 zhao4zhong1 的回复:]    使用共享内存，编程实现一个进程往共享内存中写数据，另一个进程从共享内存中读取数据这要怎么写？

user: user-0
content: 引用 16 楼 zhao4zhong1 的回复:前提是你的源代码名字是string.cpp或string.c g++或gcc生成的可执行文件名是string   我知道了。。。。原来是gcc -o string string.c才行

user: user-3
content: core有时候不大好用，如果走到了某个无调试信息的lib中而导致了segmentfault 而这个调用层次软多时，会显示不出来在哪出问题。

user: user-4
content: 引用 19 楼 u012378280 的回复:[quote=引用 16 楼 zhao4zhong1 的回复:]    使用共享内存，编程实现一个进程往共享内存中写数据，另一个进程从共享内存中读取数据这要怎么写？ Linux下不知道。 Windows下参考Microsoft SDK\samples\winbase\SharedMem

user: user-5
content: 如果不指定名称的话，生成的就是那个a.out

user: user-6
content: 这东西网上一搜大把。。。

user: user-4
content: 前提是你的源代码名字是string.cpp或string.c g++或gcc生成的可执行文件名是string

user: user-7
content: 楼上的这个提示不是很明显吗？ ./string都没有生成

user: user-0
content: 引用 13 楼 zhao4zhong1 的回复:1. ulimit -c 100 2. ./string 这步会生成core文件 3. gdb string core 4. bt   这是怎么回事？

user: user-4
content: 1. ulimit -c 100 2. ./string 这步会生成core文件 3. gdb string core 4. bt

user: user-7
content: // 在当前目录生成core文件 echo "./core_$(date +%Y-%m-%d_%H-%M-%S)_%p.core" > /proc/sys/kernel/core_pattern // core文件大小不限制 ulimit -c unlimited  gdb 可执行文件名 core文件名 // 进入gdb后使用 bt bt full

user: user-1
content: 引用 楼主 u012378280 的回复:最让人头痛的是调试的时候出现段错误，要怎样才能找出来？求大神解答！ 我想说的是，段错误最好找了，用眼睛看都行，代码多了用printf或者printk

user: user-4
content: ulimit  功能说明：控制shell程序的资源。  语　　法：ulimit [-aHS][-c <core文件上限>][-d <数据节区大小>][-f <文件大小>][-m <内存大小>][-n <文件数目>][-p <缓冲区大小>][-s <堆叠大小>][-t <CPU时间>][-u <程序数目>][-v <虚拟内存大小>]  补充说明：ulimit为shell内建指令，可用来控制shell执行程序的资源。  参　　数：   -a 　显示目前资源限制的设定。    -c <core文件上限> 　设定core文件的最大值，单位为区块。    -d <数据节区大小> 　程序数据节区的最大值，单位为KB。    -f <文件大小> 　shell所能建立的最大文件，单位为区块。    -H 　设定资源的硬性限制，也就是管理员所设下的限制。    -m <内存大小> 　指定可使用内存的上限，单位为KB。    -n <文件数目> 　指定同一时间最多可开启的文件数。    -p <缓冲区大小> 　指定管道缓冲区的大小，单位512字节。    -s <堆叠大小> 　指定堆叠的上限，单位为KB。    -S 　设定资源的弹性限制。    -t <CPU时间> 　指定CPU使用时间的上限，单位为秒。    -u <程序数目> 　用户最多可开启的程序数目。    -v <虚拟内存大小> 　指定可使用的虚拟内存上限，单位为KB。

user: user-8
content: 引用 7 楼 u012378280 的回复:1. ulimit -c unlimited your_app_name 2. your_app_name and_its_parameters 这步会生成core文件 3. gdb core_file_name  这一般比较单步高试要快，尤其是对代码不是很熟的时候。 怎么调试的可以截图过来看下 your_app_name说的程序，不是源码。

user: user-0
content: 引用 6 楼 user-8 的回复:[quote=引用 5 楼 u012378280 的回复:] ulimit -c core?????  1. ulimit -c unlimited your_app_name 2. your_app_name and_its_parameters 这步会生成core文件 3. gdb core_file_name  这一般比较单步高试要快，尤其是对代码不是很熟的时候。 [/quote]    麻烦调试界面截图过来看下好吗

user: user-0
content: 1. ulimit -c unlimited your_app_name 2. your_app_name and_its_parameters 这步会生成core文件 3. gdb core_file_name  这一般比较单步高试要快，尤其是对代码不是很熟的时候。 怎么调试的可以截图过来看下

user: user-8
content: 引用 5 楼 u012378280 的回复:ulimit -c core?????  1. ulimit -c unlimited your_app_name 2. your_app_name and_its_parameters 这步会生成core文件 3. gdb core_file_name  这一般比较单步高试要快，尤其是对代码不是很熟的时候。
user-0 提问: 怎样创建一个一bit的变量

回复:
user: user-0
content: 多谢rocktyt。

user: user-1
content: 请搜索位域.

user: user-2
content: unsigned int i; int flag = i >> 31; int id = (i >> 16) & 0x7fff; int i2 = i & 0xffff;
user-0 提问: 关于P89V51RD2单片机驱动8155芯片的问题

回复:
user: user-0
content: 8155的操作时序很简单，都是硬件自己完成的，不需要认为去操作。

user: user-1
content: 首先得弄清楚8155的接口和时序。  引用 楼主 happypdw0219 的回复:我使用P89V51RD2单片机驱动8155芯片，但是8155芯片驱动不起来，如果换成芯片就能驱动起来，此事一直困扰我好久，求大神指教？？？？

user: user-2
content: 但是8155 芯片驱动不起来， 如果换成 芯片就能驱动起来

user: user-3
content: 发到嵌入式版块看看
user-0 提问: 新手问题，指针变量作为参数

回复:
user: user-1
content: 引用是这样写的吧。（源代码扩展名必须是cpp） void SplitList(Linklist *L,Linklist &*la,Linklist &*lb) {     //这里有处理代码，分离后la和lb不为空，是两个链表的表头，代码就不贴了，没问题 } void main() {     Linklist *L;//这里L不为空     Linklist *la=NULL;     Linklist *lb=NULL;     SplitList(L,la,lb); }

user: user-1
content: void SplitList(Linklist *L,Linklist **pla,Linklist **plb) {     //将此函数中所有la替换为(*pla),lb替换为(*plb)     //这里有处理代码，分离后la和lb不为空，是两个链表的表头，代码就不贴了，没问题 } void main() {     Linklist *L;//这里L不为空     Linklist *la=NULL;     Linklist *lb=NULL;     SplitList(L,&la,&lb); }

user: user-2
content: vc是传值的，传入的是指针的值拷贝到栈变量中，而不是指针的地址，因此，函数写回的就写到了了栈变量中，调用者是无法获得修改后的指针值

user: user-0
content: 引用 4 楼 zhao4zhong1 的回复:void SplitList(Linklist *L,Linklist **pla,Linklist **plb) {     //将此函数中所有la替换为(*pla),lb替换为(*plb)     //这里有处理代码，分离后la和lb不为空，是两个链表的表头，代码就不贴了，没问题 } void main() {     Linklist *L;//这里L不为空     Linklist *la=NULL;     Linklist *lb=NULL;     SplitList(L,&la,&lb); }  请教个问题，la本身指向结构体，属于引用类型，怎么还需要传地址呢？

user: user-3
content: 引用 4 楼 zhao4zhong1 的回复:void SplitList(Linklist *L,Linklist **pla,Linklist **plb) {     //将此函数中所有la替换为(*pla),lb替换为(*plb)     //这里有处理代码，分离后la和lb不为空，是两个链表的表头，代码就不贴了，没问题 } void main() {     Linklist *L;//这里L不为空     Linklist *la=NULL;     Linklist *lb=NULL;     SplitList(L,&la,&lb); } 正解！

user: user-2
content: 应该将存放指针的单元的地址传给函数，而不是将指针值传给函数

user: user-2
content: SplitList 做了什么？ 看起来你是要L指针中输出两个指针，那么你这样做是有问题的，函数看起来应该这样定义： void SplitList(Linklist *L,Linklist **la,Linklist **lb)   {     //这里有处理代码，分离后la和lb不为空，是两个链表的表头，代码就不贴了，没问题 }

user: user-4
content: 你的做法是值传递   实参 la 和 lb 没改变
user-0 提问: 修改系统sid后不能加入域怎么办？

回复:
user: user-1
content: 大虾：讨教一下，我做了一个虚拟机，安装了一个“NEWSID"软件，修改完SID后，91VPN怎么也登录上，一直显示连接失败，请重试！我是这方面的低能儿，请大虾指点一二。

user: user-2
content: 引用 4 楼 yangw150 的回复:wi7_32下调用sysprep.exe改完sid后会清空用户的设置，dns的设置也就被清空了，所以如果不调用sysprep.exe直接加入域是可以成功的，调用之后，重启起来后用户的dns就被设置成auto了，所以在修改sid之前先将dns保存到本地，等改完sid后将保存的dns的ip重新用代码设置回去，再进行加入域，这样就可以加入域了 人最宝贵的东西是生命.生命对人来说只有一次.因此,人的一生应当这样度过:当一个人回首往事时,不因虚度年华而悔恨,也不因碌碌无为而羞愧;这样,在他临死的时候,能够说,我把整个生命和全部精力都献给了人生最宝贵的事业——为人类的解放而奋斗。

user: user-0
content: wi7_32下调用sysprep.exe改完sid后会清空用户的设置，dns的设置也就被清空了，所以如果不调用sysprep.exe直接加入域是可以成功的，调用之后，重启起来后用户的dns就被设置成auto了，所以在修改sid之前先将dns保存到本地，等改完sid后将保存的dns的ip重新用代码设置回去，再进行加入域，这样就可以加入域了

user: user-2
content: 分是次要的，公布解决方法是主要的。

user: user-0
content: 白给都没人要啊

user: user-0
content: 搞定结贴了，来着散分
user-0 提问: 简单代码分析！！

回复:
user: user-1
content: unsigned char result;  int a,b,c,d;  a=2;   0000 0010  b=4;   0000 0100  c=6;   0000 0110  d=8;   0000 1000   result=a & c; //按位与，1和1为1，其余都为0. 因此，a&c的结果就是0000 0010 也就是十进制的2了。  printf("result= %d\n",result);  result= b | d; //按位或，0和0为0，其余都为1. 因此，b|d的结果就是0000 1100 也就是12了。  printf("result= %d\n",result);  result =a ^ d;//按位异或，某个二进制位和0异或结果不变，某个二进制位和1异或取相反数.因此 a^d的结果就是，0000 1010，也就是十进制的10了。  printf("result= %d\n",result);  result = ~a; //按位取反，取每个二进制位的相反数。1111 1101 也就是253.  printf("result= %d\n",result);

user: user-2

user: user-3
content: 路过学习知识的！！！对于二进制表示新手的我暂时不懂

user: user-4
content: ~a	  11111111 11111111 11111111 11111111	11111101    =	(2^8-1)-2^1=253

user: user-4
content: int						unsigned char     a 	2 00000000 00000000 0000000 00000010     b 	4 00000000 00000000 0000000 00000100     c 	6 00000000 00000000 0000000 00000110     d 	8 00000000 00000000 0000000 00001000          a & c 00000000 00000000 00000000 00000010 	00000010    =	2^1 = 2     b | d 00000000 00000000 00000000 00001100   00001100    =	2^3+2^2=12     a ^ d 00000000 00000000 00000000 00001010	00001010    =	2^3+2^1=10     ~a	  11111111 11111111 11111111 11111101	11111101    =	(2^8-1)-2^1=253

user: user-5
content: 转化成二进制，各个位进行运算就好了！拿画画就知道了 http://www.cnblogs.com/911/archive/2008/05/20/1203477.html 参考

user: user-6
content: 先把各个数值转换成二进制，然后再进行相关的操作就ok了，按位进行相关操作。

user: user-7
content: 注意一下无符号和有符号整数的运算不一样的。
user-0 提问: 请大家看看我的这个问题，帮我解答一下！！

回复:
user: user-1
content: 编译器常用的命令行参数还是要掌握一些的。

user: user-2
content: //试试这样呢 g++ -o main example1.cpp -I./../src

user: user-3
content: 你的.cpp中引用的头文件用全路径试试 既然有 应该能引到

user: user-4
content: 引用 2 楼 max_min_ 的回复: //试试这样呢 g++ -o main example1.cpp -I./../src　 +1

user: user-5
content: 引用 2 楼 max_min_ 的回复: //试试这样呢 g++ -o main example1.cpp -I./../src　-I参数可以指定查找的路径

user: user-6
content: 执行 $PATH,看看你的h在不在path里面,不在就加进来.

user: user-7
content: .cpp文件，应该需要g++编译器来编译的吧。gcc默认是去C语言的头文件路径里查找该头文件，g++去对应的C++里查找。 所以，你用g++试着编译一下！
user-0 提问: 请教关于union的问题

回复:
user: user-1
content: 他们读取数据的方式不一样  一个是从高地址开始 一个从低地址开始

user: user-2
content: 256 == 0x100  5楼正确，2楼错误

user: user-3
content: union是共用体，即共享一段内存， student.arr[0] = 0; student.arr[1] = 1; 将共享的内存置为 00 01 x是一个整型变量，占4个字节，所以x的值在内存中的表示就是00 01 00 00(小顶端) 也就是 0x00000100 = 256

user: user-4
content: 引用 2 楼 N_sev7 的回复:char型占一个字节 整个联合占四个字节 内存如下 0X0005654:00 01 00 00 此时的x的值为十六进制的01 00 00 == 256  correct

user: user-5
content: 计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构……  对学习编程者的忠告： 眼过千遍不如手过一遍！ 书看千行不如手敲一行！ 手敲千行不如单步一行！ 单步源代码千行不如单步对应汇编一行！  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对应的汇编并单步执行观察相应内存和寄存器变化。）

user: user-6
content: 断点，查看变量！

user: user-7
content: char型占一个字节 整个联合占四个字节 内存如下 0X0005654:00 01 00 00 此时的x的值为十六进制的01 00 00 == 256

user: user-8
content: arr[0] = 0; arr[1] = 1;  => x = 0x1000,0000;        arr[1],arr[0]

user: user-7
content: 引用 6 楼 booirror 的回复:256 == 0x100  5楼正确，2楼错误 表述错误  当时想抢个SF的，我的意思和5楼的一样
user-0 提问: 求指点。。。。妹纸老师说我错了。。。

回复:
user: user-1
content: 这个问题。太蛋疼了，，这题让我着急。。

user: user-2
content: 题目是让你写出b的逻辑表达式。而你的错误是 不符合题目要求。 b=a-a; a=b;

user: user-0
content: 引用 21 楼 zyc13701469860 的回复:b = a & 0   我想答案应该是这样的。和妹纸不是一个学校。她也没记老师的联系方式。没办法了。

user: user-0
content: 引用 18 楼 z542858367 的回复:老师肯定是要考察你某个知识点，而不是只要你输出结果就好的，你这样写虽然能实现，但是你学到了什么？你有什么提高？    妹纸跟我说就是我掉了if语句。我读了几遍都没读懂老师的题意。小生不才。语文课一直都是体育老师上的。

user: user-0
content: 哈哈。我只想说这老师语文是不是体育老师教的。

user: user-3
content: 妹子老师要晚上约你，所以找叉，验证完毕

user: user-4
content: a = 0 ; b = 0;

user: user-5
content: 不懂，看答案吧，感觉这题有歧义......

user: user-6
content: 看不懂题，理解不了

user: user-7
content: 笑死了，哈哈哈

user: user-8
content: 出题的是脑残。鉴定完毕

user: user-9
content: 老师要求结果 a=0,b=0，这个应该是说内存中的实际结果，不是说打印一个 a=0 b=0来 才上四节课，这个题目的目题是让只上过四节课编程课大学学生练习一下定义变量，修改变量的值。 说老师脑残的我不得不说“同学你刚开始学四节课时你老师就让你去和GNU合作修改liunx内核模块了是吧？”

user: user-10

user: user-11
content: 我想看看老师给什么答案

user: user-12
content: 引用 22 楼 zyc13701469860 的回复:  	bool b = (a = 0);   括号多余

user: user-13
content: 引用 21 楼 zyc13701469860 的回复:b = a & 0 想太简单了 试试下面这个  #include <stdio.h> int main() {     int a;     printf("\n\n\n请输入a的值");     scanf("%d",&a); 	bool b = (a = 0);     printf("最终反馈结果a=%d,b=%d\n",a,b); }

user: user-13
content: b = a & 0

user: user-14
content: 老师肯定是要考察你某个知识点，而不是只要你输出结果就好的，你这样写虽然能实现，但是你学到了什么？你有什么提高？

user: user-0
content: 引用 16 楼 abc594986308 的回复:[quote=引用 1 楼 XinRuZhiShui196 的回复:]  还有张图。 我似乎懂了，我来解释一下。 首先题目的意思因该是这样。 首先是你输入任意a。 然后又一个逻辑表达式，其表现形式是b。 好了 我便一个程序看看，对不？ #include <stdio.h> int main(void) {    int a , b = 5;     printf("Input the value of a\n");     scanf("%d",&a);     if(b == 5)     printf("a = 0 , b = 0\n");     return 0; }[/quote]     这个还真的有可能是这样。 是老师的智商太高还是我们的智商太低。

user: user-15
content: 引用 1 楼 XinRuZhiShui196 的回复: 还有张图。 我似乎懂了，我来解释一下。 首先题目的意思因该是这样。 首先是你输入任意a。 然后又一个逻辑表达式，其表现形式是b。 好了 我便一个程序看看，对不？ #include <stdio.h> int main(void) {    int a , b = 5;     printf("Input the value of a\n");     scanf("%d",&a);     if(b == 5)     printf("a = 0 , b = 0\n");     return 0; }
user-0 提问: 关于单链表的问题。

回复:
user: user-1
content: r 是一个单独的指针，不是链表中的结点

user: user-2
content: r=s;执行这一句之后r就已经赋了另外的值，自己画个图好理解一些

user: user-3
content: 计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构……  对学习编程者的忠告： 眼过千遍不如手过一遍！ 书看千行不如手敲一行！ 手敲千行不如单步一行！ 单步源代码千行不如单步对应汇编一行！  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语言的指针，原本看似复杂的东西就会变得非常简单！ 指针即地址。“地址又是啥？”“只能从汇编语言和计算机组成原理的角度去解释了。” 但我又不得不承认：  有那么些人喜欢或者适合用“先具体再抽象”的方法学习和理解复杂事物；  而另一些人喜欢或者适合用“先抽象再具体”的方法学习和理解复杂事物。 而我本人属前者。  这辈子不看内存地址和内存值；只画链表、指针示意图，画堆栈示意图，画各种示意图，甚至自己没画过而只看过书上的图……能从本质上理解指针、理解函数参数传递吗？本人深表怀疑！ 这辈子不种麦不收麦不将麦粒拿去磨面；只吃馒头、吃面条、吃面包、……甚至从没看过别人怎么蒸馒头，压面条，烤面包，……能从本质上理解面粉、理解面食吗？本人深表怀疑！！  提醒： “学习用汇编语言写程序” 和 “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-4
content: 在纸上画关系图是最直接有效的方法。

user: user-5
content: 画一下图，就出来了，靠看代码不容易理解。

user: user-6
content: 引用 2 楼 zdnexus 的回复:我好想懂了。。  r->next=s; r=s//就是r=r->next;读取下一个节点。 r->next=null.  是不是哦？ OK了

user: user-0
content: 我好想懂了。。  r->next=s; r=s//就是r=r->next;读取下一个节点。 r->next=null.  是不是哦？

user: user-6
content: r->next=s; s->next=r->next;  //r->next已经是s了，再将s赋给s->next不就循环了吗 s->next=null;  如果按照楼主的思路应该是： r->next=s; s->next=null; 上面两步只是将s结到最后，题目还要求r需要指向最后一个节点，于是还需要r = s;
user-0 提问: 内核对象的问题

回复:
user: user-1
content: 引用 1 楼 user-4 的回复:hThread2=hThread;     //CloseHandle (hThread);                  ///////////////////////////////           WaitForSingleObject (hThread2, INFINITE);           CloseHandle (hThread2);  这种做法是错误的，关闭的HANDLE ，是不能用于等待的。 因为相关的数据结构，操作系统随时会撤销。 等待是等到那个数据结构处于有信号状态，现在这个数据结构，已经被撤销了，操作系统不再关注他了。 线程退出他也不会有信号。 只会，等到一个错误，然后线程还在运行程序就结束了。 或者一直等下去。  必须等待结束后才可以关闭句柄 hThread2=hThread;  这个赋值操作，操作系统没有记录，所有没有对该句柄相关数据结构的做任何操作。 只是复制了一个相当于野指针的句柄而已。++

user: user-2
content: CloseHandle 通常在最后使用 也就是你确定你不会再使用了才关闭

user: user-3
content: ++  引用 1 楼 user-4 的回复:hThread2=hThread;     //CloseHandle (hThread);                  ///////////////////////////////           WaitForSingleObject (hThread2, INFINITE);           CloseHandle (hThread2);  这种做法是错误的，关闭的HANDLE ，是不能用于等待的。 因为相关的数据结构，操作系统随时会撤销。 等待是等到那个数据结构处于有信号状态，现在这个数据结构，已经被撤销了，操作系统不再关注他了。 线程退出他也不会有信号。 只会，等到一个错误，然后线程还在运行程序就结束了。 或者一直等下去。  必须等待结束后才可以关闭句柄 hThread2=hThread;  这个赋值操作，操作系统没有记录，所有没有对该句柄相关数据结构的做任何操作。 只是复制了一个相当于野指针的句柄而已。

user: user-4
content: hThread2=hThread;     //CloseHandle (hThread);                  ///////////////////////////////           WaitForSingleObject (hThread2, INFINITE);           CloseHandle (hThread2);  这种做法是错误的，关闭的HANDLE ，是不能用于等待的。 因为相关的数据结构，操作系统随时会撤销。 等待是等到那个数据结构处于有信号状态，现在这个数据结构，已经被撤销了，操作系统不再关注他了。 线程退出他也不会有信号。 只会，等到一个错误，然后线程还在运行程序就结束了。 或者一直等下去。  必须等待结束后才可以关闭句柄 hThread2=hThread;  这个赋值操作，操作系统没有记录，所有没有对该句柄相关数据结构的做任何操作。 只是复制了一个相当于野指针的句柄而已。
user-0 提问: linux c 如何动态生成数组名

回复:
user: user-1
content: 做不到 数组名 最晚也得在预编译阶段 确定  运行期生成数组名 是没可能的

user: user-0
content: 贴上一个简单的实现，感谢各位大牛int main() { 	char b[10] = "bac"; 	char (*a)[10]; 	a = (char (*)[10])malloc(sizeof(char *) * 5); //	strncpy(a[0], b, sizeof(a[0])); 	strncpy(a[1], b, sizeof(a[1])); 	printf("%s\n", a[1]); 	printf("%c\n", a[1][1]);  	return 0; }

user: user-0
content: 引用 12 楼 turingo 的回复:用指针是毫无疑问的，请看我在3楼的回答。太感谢你啦，确实实现了

user: user-2
content: 用指针是毫无疑问的，请看我在3楼的回答。

user: user-0
content: 引用 10 楼 worldy 的回复:[quote=引用 楼主 he_fa 的回复:] 请问声明数组时如何给数组名带入一个变量,达到用循环批量生成数组的目的啊?比如用一个for循环跑10圈,每圈生成一个arrayX 最终是10个数组，尽量不要用二维数组吧，因为我也不知道要生成多少个数组。。。  必须使用指针，数组是在栈中或者全局数据区中分配内存，在编译时候必须确定大小[/quote]我现在都怀疑，指针真的可以实现需求么？

user: user-3
content: 引用 楼主 he_fa 的回复:请问声明数组时如何给数组名带入一个变量,达到用循环批量生成数组的目的啊?比如用一个for循环跑10圈,每圈生成一个arrayX 最终是10个数组，尽量不要用二维数组吧，因为我也不知道要生成多少个数组。。。  必须使用指针，数组是在栈中或者全局数据区中分配内存，在编译时候必须确定大小

user: user-4
content: 可以试试写一个生成代码的程序gen.exe 1. gen.exe -> generated.c 2. gcc generated.c the_rest_of_your_code.c

user: user-4
content: 引用 楼主 he_fa 的回复:每圈生成一个arrayX 最终是10个数组。 数组须在编译时确定大小，不能动态生成。

user: user-4
content: 锯齿数组,比如 double* aa[10];

user: user-5
content: lz 是要用for 动态生成   int array_1[] int array_2[] int array_3[] ......... int array_n[] 吗？ 空间可以动态生成，名字就等高人！

user: user-0
content: 引用 4 楼 thefirstz 的回复:引用 2 楼 he_fa 的回复:[quote=引用 1 楼 thefirstz 的回复:] 用指针啊，根据传入的参数进行malloc正在尝试，但还没成功。。。 把你代码精简下，发上来，给你看看[/quote] #include <stdio.h> #include <string.h> #include <stdlib.h> int main() { 	char **a; 	a = (char **)malloc(sizeof(char *) * 2); 	a[1] = (char *)malloc(sizeof(char) * 2); 	char *b = "aa"; 	 	return 0; } 想把数组的名字命名成aa，然后就不知道怎么弄了

user: user-6
content: 引用 2 楼 he_fa 的回复:引用 1 楼 thefirstz 的回复:用指针啊，根据传入的参数进行malloc正在尝试，但还没成功。。。 把你代码精简下，发上来，给你看看

user: user-2
content: 用动态二维数组，参考http://blog.csdn.net/zyxlinux888/article/details/8070495  引用 楼主 he_fa 的回复:请问声明数组时如何给数组名带入一个变量,达到用循环批量生成数组的目的啊?比如用一个for循环跑10圈,每圈生成一个arrayX 最终是10个数组，尽量不要用二维数组吧，因为我也不知道要生成多少个数组。。。

user: user-0
content: 引用 1 楼 thefirstz 的回复:用指针啊，根据传入的参数进行malloc正在尝试，但还没成功。。。

user: user-6
content: 用指针啊，根据传入的参数进行malloc
user-0 提问: 请教关于c语言变量的声明和定义

回复:
user: user-1
content: p是整形变量，使用前需初始化，而a是整形，无须初始化

user: user-2
content: 这里是定义不是申明，另外int *p那么p指向了哪里？你修改了一个未知地址的值你说可不可能会出问题?

user: user-3
content: 没有初始化的*p，没有指向内存中的任何一个地址，对它进行赋初值（如果不是一个变量的地址的话）就会出错

user: user-4
content: 这两个都是定义，也就是说都在内存里占用了位置。  至于a被修改不会有问题而*p修改就会有问题一说，我觉得你说得没道理。  如果a是一个关键变量，你随意改动a的值，我保证程序跑的乱七八糟的。

user: user-5
content: int a; int *p; 同样都是 a = 10; p = 46875; 一点问题都没有 安全 不同的是  a不能做 一元运算符*的操作数  p可以做 一元运算符*的操作数   如果你  随便改 a的值  然后做 * 操作 一样死  a = 0; *(int*)a;//死了

user: user-6
content: 其实电脑开机后物理内存的每个字节都是可读写的，区别仅在于操作系统内存管理模块在你读写时是否能发现并是否采取相应动作而已。操作系统管理内存的粒度不是字节而是页，一页通常为4KB。  崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。

user: user-7
content: 自动变量,和寄存器变量的定义，其实是一种声明， 他们实际在运行时，函数调用过程中定义，------确定地址，初始化。

user: user-7
content: C语言中： 1) 定义也是声明 2）声明未必是定义。  extern int a;//纯粹的声明  int a; //定义也是声明，外部变量初始化为0；  int b = 10;//声明同时初始化，定义。   int main() {     int a=10;//声明同时初始化，定义，值确定。      int b;//声明没有初始化，也是定义，局部自动变量，一旦声明就会分配内存。      register c=10;//声明同时初始化，定义，值确定。     register d;   //声明没有初始化，定义。值不确定。                      //寄存器变量，一旦声明就会分配寄存器或者内存      return 0; }

user: user-8
content: 变量一段内存空间，其中可以存储某种类型的数据 指针也是变量，但其中存储某种数据类型的地址  引用 1 楼 user-11 的回复:这两个都是定义！！！  extern int a; 这才是声明  变量一段内存空间，其中可以存储某种类型的数据 指针也是变量，但其中存储某种数据类型的地址

user: user-9
content: 引用 楼主 u011144614 的回复:如果我声明变量和指针 int a ; int * p ;  同样是声明没定义，如果修改*p的值就会可能产生严重后果，但是修改a的值却不会，请问这是为什么呢？  没有初始化的*p，没有指向内存中的任何一个地址，对它进行赋初值（如果不是一个变量的地址的话）就会出错。例如，*p = 5;这里5不是某个变量的地址，所以会出现lvalue和rvalue的匹配错误。那么对*p赋的值是个地址，例如，*p = 0x22b40020，这样行吗？这样也不行，0x22b40020固然有可能是内存中存在着的某个地址，但这个地址上的数值是不确定的，也许是其他程序在用的一个值，贸然这样给*p赋这个地址有可能会给*p机会修改这个数值，从而破坏其他程序所要用的数值。 而给a赋值则没问题，例如，a = 5，这是对变量进行初始化。为什么可以这样呢？因为声明了变量a，就意味着在内存中找到了一个地址，例如，0x002c0450，而以这个地址为起始的若干个（多为4个，int一般占用4个字节内存的大小）连续内存单元就用以来存储数值5了。 总之，没有初始化的*p和a的本质区别就是，*p要是想结婚就得发愁，因为单位没有给他分配房子，给他个新娘他都不知让人家住哪里。而a要是想结婚就不用发愁了，因为他刚一进单位，单位已经给他分配房子了，如果有女孩子投怀送抱他就可以随时将人家接入洞房。

user: user-10
content: 因为指针是间接操作，所以很有可能改动别的数据。  引用 楼主 u011144614 的回复:如果我声明变量和指针 int a ; int * p ;  同样是声明没定义，如果修改*p的值就会可能产生严重后果，但是修改a的值却不会，请问这是为什么呢？

user: user-11
content: 这两个都是定义！！！  extern int a; 这才是声明
user-0 提问: 今天coolpad笔试 线程间通信函数实现

回复:
user: user-1
content: 题目 表达不清。

user: user-2
content: 引用 9 楼 wanghb1989 的回复:[quote=引用 8 楼 zhxianbin 的回复:] [quote=引用 7 楼 wanghb1989 的回复:] [quote=引用 6 楼 zhxianbin 的回复:] 线程间需要通信吗?  逻辑上不能有吗？[/quote] 进程间通信，线程间同步与互斥。线程处于相同的内存空间，变量的访问和作用域有关，无需特殊手段。[/quote] 这题意思是说一个包裹函数，没别的意思 [/quote]那和 list 、queue 又有什么关系呢，这两个也需要加锁啊

user: user-3
content: 没明白题目意思，是要你自己实现吗还是？？？这个跟链表、队列又有什么关系呢？

user: user-0
content: 引用 8 楼 zhxianbin 的回复:[quote=引用 7 楼 wanghb1989 的回复:] [quote=引用 6 楼 zhxianbin 的回复:] 线程间需要通信吗?  逻辑上不能有吗？[/quote] 进程间通信，线程间同步与互斥。线程处于相同的内存空间，变量的访问和作用域有关，无需特殊手段。[/quote] 这题意思是说一个包裹函数，没别的意思

user: user-2
content: 引用 7 楼 wanghb1989 的回复:[quote=引用 6 楼 zhxianbin 的回复:] 线程间需要通信吗?  逻辑上不能有吗？[/quote] 进程间通信，线程间同步与互斥。线程处于相同的内存空间，变量的访问和作用域有关，无需特殊手段。

user: user-0
content: 引用 6 楼 zhxianbin 的回复:线程间需要通信吗?  逻辑上不能有吗？

user: user-2
content: 线程间需要通信吗?

user: user-4
content: 不用queue和list的话就用公共存储区呗， 配合mutex,sem信号量实现多线程对公共 数据的安全读写。 比如说在公共存储区内创建指针数组， 每个元素都是要传递的数据的地址（这些数据都通过malloc/new创建）。

user: user-5
content: 我个人的理解是，要自己去实现一个队列，而不是调用库函数的。只是在队列的操作中注意用锁。

user: user-6
content: 随便揪一个程序员都要掌握这种基础功噢。  关键字：队列，互斥锁，条件变量。

user: user-7
content: 我认为可以用链表
user-0 提问: 一道数据结构 栈的问题 

回复:
user: user-1
content: S.top=S.base=0; 这个不是清空操作！

user: user-2
content: {        S.base=new char[100];      S.top=S.base=0;   ///你给一个指针赋0作甚？ 改成  S.top=S.base;就OK了    S.stacksize=100;        }
user-0 提问: 请教一个位编码的过程

回复:
user: user-1
content: 如果种类不多可以查表，实际上一个byte 不过256中组合

user: user-2
content: 位操作呗，变换呗

user: user-3
content: 用位运算。  引用 楼主 gzzaigcn 的回复:眼下有一个需求，发送的多个Byte需要经过编码，每个bit如0：使用101,1使用110来编码。如何快速的实现呢？而且每次发起的编码序列前面还需要有6bit的数据帧头。
user-0 提问: C语言读取jpeg2000类型图片宽和高的问题

回复:
user: user-1
content: 依次查找SOC:0xFF4F  SIZ:0xFF51  在SIZ后面的数据中保存着图片的宽和高. openjpeg中的函数:opj_j2k_read_siz 其中width = XSize-XOSize height = YSize-YOSize

user: user-2
content: 用libjpeg试试看。  引用 楼主 hanow 的回复:大家好，  我刚接触图片处理这方面，在认知上还很有限。最近遇到一个棘手的问题。我打算保存jpeg2000类型图片宽和高，该怎么样实现呢。。  一直在找这方面的解释和实例，也做了一些尝试， 就是通过调用openjpeg程序，读取图片的头文件，但是没成功，有点无助。。。现在正在看函数opj_read_header 在(https://code.google.com/p/openjpeg/source/browse/trunk/libopenjpeg/openjpeg.h?r=950)。  请问各位高手朋友，能不能给我个方向或者提示呀? 比如，我应该从哪些文件, 哪些函数着手...  先谢谢大家。

user: user-0
content: 谢谢你的回复，  libjpeg 应该是对应处理jpeg类型的，我问的是openjpeg.
user-0 提问: 初学者一个，遇到个很纠结的问题，求指教

回复:
user: user-1
content: 引用 8 楼 u012379764 的回复:引用 7 楼 zhao4zhong1 的回复:程序员的常识之一：不要将程序源代码或项目或exe放在桌面这种复杂（多半带空格和汉字且在防火墙或杀毒软件严密控制的C盘上）的目录下。我给单独放一个硬盘里了，保存的时候名称对程序没影响吧，比如我保存一个刚敲好的程序，用汉字保存的用英文，数字试试。

user: user-2
content: 试试改用纯英文数字文件名

user: user-0
content: 引用 7 楼 zhao4zhong1 的回复:程序员的常识之一：不要将程序源代码或项目或exe放在桌面这种复杂（多半带空格和汉字且在防火墙或杀毒软件严密控制的C盘上）的目录下。我给单独放一个硬盘里了，保存的时候名称对程序没影响吧，比如我保存一个刚敲好的程序，用汉字保存的

user: user-2
content: 程序员的常识之一：不要将程序源代码或项目或exe放在桌面这种复杂（多半带空格和汉字且在防火墙或杀毒软件严密控制的C盘上）的目录下。

user: user-0
content: 引用 5 楼 user-3 的回复:[quote=引用 4 楼 u012379764 的回复:] [quote=引用 1 楼 user-3 的回复:] 代码没有问题的！可以编译运行！ 至于你说的问题，可能是在敲代码过程中，出现的语法错误！ 中英文标点符号这些问题， 根据编译提示错误，修改一下就好了！我把C语言软件关掉重新打开再运行这个程序就能运行，但是我要是在原基础上开另外一个我保存的程序为什么还是不能运行，或者就是还是运行我第一次打开的那个程序，后打开那个没反应，这是什么原因。[/quote]  用的是什么环境？文件名保存的对不对？有没有先保存下[/quote]用的是Microsoft Visual C++,文件名保存是什么意思，不就是直接点Save就保存了么

user: user-3
content: 引用 4 楼 u012379764 的回复:[quote=引用 1 楼 user-3 的回复:] 代码没有问题的！可以编译运行！ 至于你说的问题，可能是在敲代码过程中，出现的语法错误！ 中英文标点符号这些问题， 根据编译提示错误，修改一下就好了！我把C语言软件关掉重新打开再运行这个程序就能运行，但是我要是在原基础上开另外一个我保存的程序为什么还是不能运行，或者就是还是运行我第一次打开的那个程序，后打开那个没反应，这是什么原因。[/quote]  用的是什么环境？文件名保存的对不对？有没有先保存下

user: user-0
content: 引用 1 楼 user-3 的回复:代码没有问题的！可以编译运行！ 至于你说的问题，可能是在敲代码过程中，出现的语法错误！ 中英文标点符号这些问题， 根据编译提示错误，修改一下就好了！我把C语言软件关掉重新打开再运行这个程序就能运行，但是我要是在原基础上开另外一个我保存的程序为什么还是不能运行，或者就是还是运行我第一次打开的那个程序，后打开那个没反应，这是什么原因。

user: user-0
content: 我把C语言软件关掉重新打开再运行这个程序就能运行，但是我要是在原基础上开另外一个我保存的程序为什么还是不能运行，或者就是还是运行我第一次打开的那个程序，后打开那个没反应，这是什么原因。

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

user: user-3
content: 代码没有问题的！可以编译运行！ 至于你说的问题，可能是在敲代码过程中，出现的语法错误！ 中英文标点符号这些问题， 根据编译提示错误，修改一下就好了！
user-0 提问: opencv里面的一段源码，有点看不懂，求指点！！！

回复:
user: user-1
content: 引用 2 楼 williamzero1 的回复:非常感谢楼上提供的链接，但是那个库是用c#写的，我没学过啊。有点像为了啃掉一块骨头，找来另一块更大的骨头啊~~ 哈，你这个比喻不错。 不过关键是算法和公式，不是开发语言吧。

user: user-0
content: h = (vr & (g - b)) +                 (~vr & ((vg & (b - r + 2 * diff)) + ((~vg) & (r - g + 4 * diff)))); 那您可以稍微为我解释下这段代码吗？这些位操作是要做什么呢？

user: user-2
content: RGB转化到HSV的算法 max=max(R,G,B): min=min(R,G,B) V=max(R,G,B) S=(max-min)/max: ifR = max,H =(G-B)/(max-min)* 60 ifG = max,H = 120+(B-R)/(max-min)* 60 ifB = max,H = 240 +(R-G)/(max-min)* 60 ifH < 0,H = H+ 360  对照这个，代码基本是按照这个步骤。很好理解。

user: user-0
content: 非常感谢楼上提供的链接，但是那个库是用c#写的，我没学过啊。有点像为了啃掉一块骨头，找来另一块更大的骨头啊~~

user: user-1
content: http://www.codeproject.com/Articles/613798/Colorspaces-and-Conversions
user-0 提问: sql怎么实现三表联合查询，查询三个表中的计算信息！！

回复:
user: user-0
content: 表一需要查这些信息， 表2需要查oil_bottom的最大值，以及oil_top的最小值.  表三需要查，gun_kind为1为总和，还有就是这个id所对应的条数，以及gun字段所对应的总长。 恩，是的，显示的时候想要在一个list列表中显示出所查的这些信息

user: user-0
content: 没看懂啊，三张表啊，我贴图的话，您一定能看懂啊。您有qq么

user: user-1
content: inner join 没看懂你在说什么
user-0 提问: 什么情况下需要创建线程？

回复:
user: user-1
content: 例如有界面操作和数据操作，如果数据量大，处理很慢就可以用多线程，否则操作界面可能响应很慢。

user: user-2
content: 当某一工作将消耗很长时间 为了不阻塞主线程 会采用线程  运行一个可执行程序就是创建一个进程

user: user-3
content: 加线程防止程序死锁

user: user-4
content: 一个大型程序，才需要多进程。 进程，是程序的一次运行而已，能够编写的是程序 一般程序，多线程做够了。

user: user-4
content: 首先要了解线程,进程的概念。 进程，是一个可执行程序的一次运行。 线程，是一个可执行程序的一条运行路径。 一个进程，可以同时有许多线程运行。   程序可以写一些代码，开一个线程执行。 但是开进程就不是那么简单了。  只能写一个程序，编译后供其他程序调用。  不过Unix ,linux 的进程和线程的界限很模糊。 在这种操作系统中，线程只是一个轻量级的进程。  线程没有独立的内存空间，进程有自己的独立空间。 进程是操作系统分配资源的单位，线程不是，线程只是独立运行的一段代码。  程序员对线程，有更多的控制权； 一个进程里面的所有线程，代码都是程序员编写的； 线程之间如何协调工作，都是程序员可以控制的。  对进程，操作系统可以控制的更多，而程序员能够控制的很少。 进程是线程的容器。  多进程，每一个进程，都需要一份资源，多线程，可以共享这些资源。

user: user-5
content: 线程比进程更容易共享资源， 更容易相互通讯。 进程更容易隔离错误，更容易横向扩展。

user: user-6
content: 比如调用阻塞IO函数未返回前想同时干点其它事情的时候。

user: user-7
content: 等你工作一阵,你就知道这种问题都不叫问题.

user: user-8
content: 需不需要线程是由程序员来决定的，举个例子吧，对于扫描工具，你可以单线程慢慢地一条一条地扫描，只要你喜欢；你也可以使用多线程，一批一批的去扫描，节省时间。
user-0 提问: 关于 windows c编程 ，cygwin ，gcc

回复:
user: user-1
content: 《Windows PE权威指南》

user: user-2
content: 引用 1 楼 N_sev7 的回复:WinMain函数是Win32程序的入口函数，你说“cygwin下用gcc编译windows_c 程序，gcc怎么也可以识别winmain”那是因为cygwin是Windows模拟unix的一个平台，从事Windows嵌入式开发的一个平台，WinMain函数是Windows的入口函数，所以在cygwin下也能识别WinMain函数  入口函数是规定的，你也可以指定

user: user-3
content: 1、Windows下的控制台程序是从main函数开始的； 2、Windows下的GUI程序必须从WinMain进去，这是操作系统给应用程序的入口； 3、cygwin归根结底也必须遵守Windows的约定。  引用 楼主 ysm804471920 的回复:在windows下编写c程序时，入口方法是winmain，而不是main，谁能详细点介绍些； cygwin下用gcc编译windows_c 程序，gcc怎么也可以识别winmain，然后生成exe程序； 麻烦详细些介绍。

user: user-4
content: WinMain函数是Win32程序的入口函数，你说“cygwin下用gcc编译windows_c 程序，gcc怎么也可以识别winmain”那是因为cygwin是Windows模拟unix的一个平台，从事Windows嵌入式开发的一个平台，WinMain函数是Windows的入口函数，所以在cygwin下也能识别WinMain函数

user: user-5
content: 引用 1 楼 N_sev7 的回复:WinMain函数是Win32程序的入口函数，你说“cygwin下用gcc编译windows_c 程序，gcc怎么也可以识别winmain”那是因为cygwin是Windows模拟unix的一个平台，从事Windows嵌入式开发的一个平台，WinMain函数是Windows的入口函数，所以在cygwin下也能识别WinMain函数 同意
user-0 提问: C语言函数指针数组的简单实例

回复:
user: user-1
content: 引用 1 楼 user-6 的回复:不错不错，很简单的实例，很能说明问题！++

user: user-2

user: user-3
content: #include <stdio.h> double A[300][100]; double valuex[300]; double valuey[300]; int i; double fun00(double x,double y) {return x  +   y  ;}; double fun01(double x,double y) {return x*x+ 3*y  ;}; double fun02(double x,double y) {return x  + 2*y*x;}; //...  fun03(double x,double y) {return ...+...   ;}; //... //...  fun98(double x,double y) {return ...+...   ;}; double fun99(double x,double y) {return x/2+20*y  ;}; double (*funNN[100])(double,double)={     fun00,     fun01,     fun02, //  fun03, //  ... //  fun98,     fun99, }; int main() {     double x,y;     int f,FN;      for (i=0;i<300;i++) {         valuex[i]=(double)i;         valuey[i]=(double)i;     }     FN=3;     for (i=0;i<300;i++) {          x=valuex[i];          y=valuey[i];          for (f=0;f<FN;f++) A[i][f]=funNN[f](x,y);     }     for (i=0;i<3;i++) {         for (f=0;f<FN;f++) printf("%lg ",A[i][f]);         printf("\n");     }     return 0; } //0 0 0 //2 4 3 //4 10 10

user: user-4
content: 不错 简单易学

user: user-5

user: user-6
content: 不错不错，很简单的实例，很能说明问题！
user-0 提问: （求指教）关于类型转换

回复:
user: user-1
content: i=1e10不截断，i=(int)1e10截断呢？  因为类型不同，所以要转换 也不过是取最大可表示整数，和截断取整两种方式而已。  各有各的道理  截断取整，数据没有改变，只是因为，数据长度不够，表示不了，多余的丢失了。  取最大可表示整数，因为数据太大，取最大可表示整数，表示数据比较大，这在有些时候也是很方便的。 至少不会把正整数，变成负整数。  实际如何操作，看编译器，和标准。  i=1e10不截断，i=(int)1e10？？ 你的编译器比较另类吧； 这都是类型转换，应该一致才对。

user: user-2
content: 引用 8 楼 zhao4zhong1 的回复:抛开编译器，对 int i=1e10; 使用以下三种方法： ①给i赋值int类型所能表达的最大整数 ②给i赋值为1e10在内存中对应的字节 ③编译提示错误 我个人认为各有各的道理。 自顶！

user: user-0
content: 那为什么i=1e10不截断，i=(int)1e10截断呢？

user: user-1
content: 整型数据之间的转换，不过是扩展（有符号符号扩展，无符号0扩展），和截断两种方式。 浮点数和整型之间的转换，可能与此截然不同。  PS:  1e10 这是科学计数法； C，C++ 似乎只有浮点数，才这样表示； 整型数据，好像没有，这种常数表示方法。

user: user-3
content: 引用 3 楼 turingo 的回复:超出范围会被截断，相当于0x7fffffff  [quote=引用 楼主 istudy2012 的回复:] 在学《深入理解计算机系统》时遇到的 对于如下代码： #include<stdio.h> main() {      int i=1e10;      printf("%d\n",i); } 结果是TMIN,而把它改为i=(int)1e10时，结果却是1410065408. 请问这是为什么？[/quote]++

user: user-2
content: 抛开编译器，对 int i=1e10; 使用以下三种方法： ①给i赋值int类型所能表达的最大整数 ②给i赋值为1e10在内存中对应的字节 ③编译提示错误 我个人认为各有各的道理。

user: user-4
content: 引用 6 楼 zhao4zhong1 的回复:可以换至少三家不同公司和两种不同硬件平台下的C编译器试试。 如果没有这样的条件呢，那又该怎么分析

user: user-2
content: 可以换至少三家不同公司和两种不同硬件平台下的C编译器试试。

user: user-4
content: 引用 4 楼 zhao4zhong1 的回复:由具体编译器决定。  不要写连自己也预测不了结果的代码！  为什么是编译器呢？ 1e10 已经超过了int能表示的最大整数啊，从理论上是可以分析的啊。不是循环来的吗？ 2147483648*a+b,a,b均为正整数 整型值在32位的操作系统的范围就是-2147483648~2147483647啊，i是一个通过强制转换来的整型，所以i的值就在这个范围内啊。

user: user-2
content: 由具体编译器决定。  不要写连自己也预测不了结果的代码！

user: user-5
content: 超出范围会被截断，相当于0x7fffffff  引用 楼主 istudy2012 的回复:在学《深入理解计算机系统》时遇到的 对于如下代码： #include<stdio.h> main() {      int i=1e10;      printf("%d\n",i); } 结果是TMIN,而把它改为i=(int)1e10时，结果却是1410065408. 请问这是为什么？

user: user-6
content: 超过int的最大范围了

user: user-7
content: 就是超过一个int型数据能表示的最大范围了，1e10-2147483648*4就这结果了。

user: user-1
content: 1e10 = 0x2540BE400  截断后 = 0x540BE400=1410065408  这个编译器 1e10不超过最长整型数据的表示范围,不过这是double 类型的浮点数。  可精确表示 - 2^54..+2^54 之间的整数 void print_int() {     int ill =(int)(long long )1e10;     printf ("%d\n",ill); //VC6:（long long 用 LONGLONG 替换）1410065408，VC10 1410065408,mingw ：1410065408     int i =(int)1e10;     printf ("%d\n",i);//VC6: 1410065408,VC10 ：1410065408,mingw： 2147483647 }  这种浮点数和整型数之间的转换， 由于可表示范围不同，超过int的表示范围，不同编译器采取了不同的方法。 VC6，VC10采取截断方式，mingw 则取最大整数。  这是和实现相关的，不要写这种依赖编译实现的代码，除非想追随新标准。 PS： 1e10 是浮点常数，不是整型常数。  10000000000，才是整型常数。 而且这个数超出int的表示范围了，需要用 long long int 来表示。
user-0 提问: 6个变态的c语言hello world程序！！！

回复:
user: user-1
content: 风格各不相同

user: user-2
content: C语言怪异代码大赛历届作品大全 1984～1996，1998，2000，2001，2004～2006，2011，2012 http://download.csdn.net/detail/zhao4zhong1/5538847

user: user-3
content: 比较下来，感觉还是第一个的代码风格比较好。

user: user-4
content: 看着很厉害的样子....................

user: user-5
content: 牛就一个字，

user: user-6
content: 程序是给人看的，如果你非要抢机器的工作

user: user-7
content: 条条大路通罗马
user-0 提问: 编的第一个小小小程序，为啥不对呢,求教

回复:
user: user-1
content: 大括弧下敲代码要用回车另起一行。

user: user-2
content: #include <stdio.h> int main(void) { int a,b,c,x1,x2; printf (" Please input three int:\n"); scanf ("%d,%d,%d",&a,&b,&c); x1 = a>b?a:b; x2 = x1>c?x1:c;  printf ("%d\n"，x2); return 0; } 路过调整下，输入的代码最好有一个逗号或者空格隔开吧！！！！新手求解这个东西实现的目标

user: user-3
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-4
content: 第一次竟然不是hello world。。。

user: user-5
content: printf ("%d\n"，x2);  这个逗号是中文的  换英文输入法输入逗号

user: user-6
content: 学会看COMPILER的提示，学会debug

user: user-7
content: 编程时不要打开中文输入法

user: user-8
content: printf ("%d\n"，x2);中逗号改为英文的

user: user-9
content: printf ("%d\n"，x2); 把红色部分的换成英文下的;

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

user: user-3
content: 输入 1空格2空格3回车

user: user-10
content: 调试一下不就知道了？

user: user-11
content: 代码中不要包含中文和全角符号：  #include <stdio.h> int main(void) {int a,b,c,x1,x2; printf(" Please input three int:\n"); scanf("%d%d%d",&a,&b,&c); x1 = a>b?a:b; x2 = x1>c?x1:c;  printf("%d\n",x2); return 0; }  引用 楼主 u012370173 的回复:#include <stdio.h> int main(void) {int a,b,c,x1,x2; printf (" Please input three int:\n"); scanf ("%d%d%d",&a,&b,&c); x1 = a>b?a:b; x2 = x1>c?x1:c;  printf ("%d\n"，x2); return 0; }
user-0 提问: windows下怎样用C语言多线程连接MySQL。

回复:
user: user-0
content: 引用 2 楼 user-1 的回复:[quote=引用 1 楼 user-1 的回复:] 提前初始化一个MYSQL连接池，说白了就是一个MYSQL*数组哈，记得用锁保护它，是否使用条件变量与你是否提供阻塞接口有关。  创建一个线程池，希望使用一个MYSQL*就加锁从池里取一个。  这就是MYSQL连接池了，so easy哈。  忘了说，用完要归还到MYSQL连接池里哈。[/quote] 嗯，谢谢了，虽说还不知道怎么做，但是知道大概方向了，还是很感谢你。

user: user-0
content: 引用 2 楼 user-1 的回复:[quote=引用 1 楼 user-1 的回复:] 提前初始化一个MYSQL连接池，说白了就是一个MYSQL*数组哈，记得用锁保护它，是否使用条件变量与你是否提供阻塞接口有关。  创建一个线程池，希望使用一个MYSQL*就加锁从池里取一个。  这就是MYSQL连接池了，so easy哈。  忘了说，用完要归还到MYSQL连接池里哈。[/quote] 有没有一个简单的例子，给一个，因为是初学者，有好多地方不太明白，谢谢。

user: user-1
content: 引用 1 楼 user-1 的回复:提前初始化一个MYSQL连接池，说白了就是一个MYSQL*数组哈，记得用锁保护它，是否使用条件变量与你是否提供阻塞接口有关。  创建一个线程池，希望使用一个MYSQL*就加锁从池里取一个。  这就是MYSQL连接池了，so easy哈。  忘了说，用完要归还到MYSQL连接池里哈。

user: user-1
content: 提前初始化一个MYSQL连接池，说白了就是一个MYSQL*数组哈，记得用锁保护它，是否使用条件变量与你是否提供阻塞接口有关。  创建一个线程池，希望使用一个MYSQL*就加锁从池里取一个。  这就是MYSQL连接池了，so easy哈。
user-0 提问: 哪个函数能够获取手柄按键的值？

回复:
user: user-1
content: 先查看按下手柄会得到什么？我之前做过是得到一个字符串，用if（gets()==）

user: user-2
content: Multimedia Joystick Functions An application uses the joystick functions to query a joystick driver and to prepare an application to receive notification messages from a joystick driver.  The following functions are used with multimedia joysticks.       joyGetDevCaps   joyGetNumDevs   joyGetPos   joyGetPosEx   joyGetThreshold   joyReleaseCapture   joySetCapture   joySetThreshold

user: user-3
content: Direct Input
user-0 提问: 如何解决引用不同头文件中相同变量名的问题？

回复:
user: user-1
content: 用extern，不过相同名称的变量名都变成一个了，这个可能有时候逻辑就不多了。头文件里面定义变量名就应该用名空间包围的。

user: user-2
content: 怎么会在头文件中定义变量，这么业余？ 命名规范呢？  同意楼上的，这是一个本不该出现的问题。

user: user-3
content: 变量不要定义在头文件中。

user: user-4
content: 其中一个通过动态库，动态加载来引用好了。  同名变量，在不同头文件中重复，本来就不应该出现。  而头文件，是不会定义外部变量的，只会出现引用外部变量的声明。 所以，大概只有C++  namespace, 或者采用比较偏门的手段，才能解决。

user: user-5
content: 引用 7 楼 mujiok2003 的回复:在头文件中定义变量的做法值得商榷。   在头文件中只声明变量

user: user-6
content: 架构师呢，溜号了？禁止重名/近名，这个是架构师的最基本职责啊

user: user-7
content: 不能改名字？ 用extern

user: user-8
content: 变量命名的时候 文件名也作为一部分  就避免了

user: user-9
content: static

user: user-10
content: 引用 4 楼 chenbin0522 的回复:[quote=引用 3 楼 mujiok2003 的回复:] 加名字空间。 C？也有么？[/quote]  你也可以模拟一下。         typedef struct  {    int a;   } namespaceABC;   extern namespaceABC ABC;   typedef struct  {    int a;   } namespaceEFG;   extern namespaceEFG EFG;   ABC.a = EFG.a;

user: user-10
content: 在头文件中定义变量的做法值得商榷。

user: user-11
content: 用不同的namespace括住？

user: user-10
content: 引用 4 楼 chenbin0522 的回复:[quote=引用 3 楼 mujiok2003 的回复:] 加名字空间。 C？也有么？[/quote] 没有。

user: user-0
content: 引用 3 楼 mujiok2003 的回复:加名字空间。 C？也有么？

user: user-10
content: 加名字空间。

user: user-0
content: 引用 1 楼 adlay 的回复:改名 额。。。没有别的方法么？

user: user-12
content: 改名
user-0 提问: lcs如何打印出最长公共字串？

回复:
user: user-1
content: 仅供参考//最长公共子序列字符个数 //c[i][j]保存字符串 {xi},{yj},(长度分别为i,j)的最长公共子序列的字符个数 //i=0或者是j=0 时，c[i][j]必定为零, i,j>=0 且 xi=yj, c[i][j]=c[i-1][j-1]+1 //若 i,j>0 但xi!=yj, c[i][j]=max{ c[i-1][j] , c[i][j-1] } #include <stdio.h> #include <string.h> int c[1001][1001]; void lcs(int a, int b, char x[], char y[], int c[][1001]) {     int i,j;     for(i=1;i<a;i++)         c[i][0]=0; //if b==0, set c[i][j]=0;     for(i=1;i<b;i++)         c[0][i]=0; // if a==0; set c[i][j]=0;     for(i=1;i<=a;i++) // if a!=0,b!=0 loop         for(j=1;j<=b;j++) {             if(x[i-1]==y[j-1])                 c[i][j]=c[i-1][j-1]+1;             else if (c[i-1][j]>=c[i][j-1])                 c[i][j]=c[i-1][j];             else                 c[i][j]=c[i][j-1];         } } int main() {     char x[1001],y[1001];     while ( scanf("%s%s",x,y)!=EOF ) {         int a=strlen(x);         int b=strlen(y);         memset(c,0,sizeof(c));         lcs(a,b,x,y,c);         printf("%d\n",c[a][b]);     }     return 0; }

user: user-2
content: 返回所得字符串

user: user-3
content: 程序完整？

user: user-4
content: 在回调里加答应应该是可以的！ 当然你的回调写的有问题！ 你函数本来只有一个返回值0，但是最后else判断却是同时判断返回值的差，所以没有必要的，思路有问题！

user: user-5
content: 我还以为是连续字串呢 结果是不连续的 你就用栈存起来吧 每次遇到相同的字符就压栈 压栈的时候先确定栈中没有这个字符才压入  不过最好还是改成循环来做

user: user-5
content: 话说递归真的不好打印啊！
user-0 提问: 完全一样的语句运行结果却不相同，郁闷

回复:
user: user-0
content: 另外如果添加一句，结果就和我想的一样了，我不知道为什么，下面程序结果是D 感觉需要对开辟的空间的地址进行一些操作，之后它就变正常了  #include <stdio.h> #include <string.h> #include <stdlib.h>  void TestD(void) { 	 	char *str = (char *) malloc(100); 	strcpy(str, "Test"); 	//添加下面这一句，结果就正常了 	printf("%s",str); 	 free(str); 	if(str != NULL) 	{ 		strcpy(str, "D"); 		printf("%s\n",str); 	} 	  	   	 }  int main(){ 	TestD(); 	return 0; }

user: user-1
content: 野指针，建议楼主常备一份编程规范

user: user-0
content: 引用 2 楼 turingo 的回复:对野指针进行操作结果难以预料，因为指针所指向的数据及有可能被其它代码段改写。  [quote=引用 楼主 QQ594373024 的回复:]  #include <stdio.h> #include <string.h> #include <stdlib.h>  void TestD(void) { 	 	char *str = (char *) malloc(100); 	strcpy(str, "Test"); 	 free(str);  	if(str != NULL) 	{ 		strcpy(str, "D"); 		printf("%s\n",str); 	} 	  	if(str != NULL) 	{ 		strcpy(str, "D"); 		printf("%s\n",str); 	}  	 }  int main(){ 	TestD(); 	return 0; }  第一个输出时乱码，第二个就是正常的D，我不明白其中的原因，整个程序完全出乎我的意料 的 求大牛们详细解释下，谢啦[/quote]   确实存在不确定因素，有时这样有时那样的。

user: user-0
content: 引用 3 楼 coblan 的回复:楼主，你以操作野指针为乐啊？？  恩，知道原因了

user: user-0
content: 引用 4 楼 max_min_ 的回复:释放之后，没有清空之前，打印它的地址看看，其实它是有地址的！ 所以肯定是可以存放字符串的，只不过你不知道它的地址何时有效何时无效而已！ 访问野指针偶尔能获取到数据，但并不能代表就可以这样做，很危险！结果可能都是不可估计的   昨天晚上太累，弄得有点神志不清，早上醒来就知道什么原因了

user: user-2
content: 反汇编一目了然！

user: user-3
content: 释放之后，没有清空之前，打印它的地址看看，其实它是有地址的！ 所以肯定是可以存放字符串的，只不过你不知道它的地址何时有效何时无效而已！ 访问野指针偶尔能获取到数据，但并不能代表就可以这样做，很危险！结果可能都是不可估计的

user: user-4
content: 楼主，你以操作野指针为乐啊？？

user: user-5
content: 对野指针进行操作结果难以预料，因为指针所指向的数据及有可能被其它代码段改写。  引用 楼主 QQ594373024 的回复: #include <stdio.h> #include <string.h> #include <stdlib.h>  void TestD(void) { 	 	char *str = (char *) malloc(100); 	strcpy(str, "Test"); 	 free(str);  	if(str != NULL) 	{ 		strcpy(str, "D"); 		printf("%s\n",str); 	} 	  	if(str != NULL) 	{ 		strcpy(str, "D"); 		printf("%s\n",str); 	}  	 }  int main(){ 	TestD(); 	return 0; }  第一个输出时乱码，第二个就是正常的D，我不明白其中的原因，整个程序完全出乎我的意料 的 求大牛们详细解释下，谢啦
user-0 提问: 能不能这样初始化一个队列？

回复:
user: user-1
content: //    pQueue = NULL;     //这样行不行? pQueue是地址的形参，你可以改变地址指向的内容，但是改变地址本身是不会对外部有影响的 而且，就像你做了如下操作，你觉得给a初始化了吗？  int a; int * pa = &a; pa = NULL;   个人觉得，你调用一下这个函数 void InitializeQueue(Queue *pQueue); 还不如直接写个构造函数呢

user: user-2
content: pQueue->front = pQueue->tail = NULL;//一般用这种方法。 //    pQueue = NULL;     //这样行不行?这样是不是也意味着pQueue->front = pQueue->tail = NULL 这样显然不行，因为 1.你在内部改的参数值，是不会传到外面的。外面的     Queue one;     InitializeQueue(&one); 后，one的地址不会是NULL 2.你即使改成引用，也是错的，因为one已经是一个对象，你把它地址设为null,是非法的

user: user-3
content: void InitializeQueue(Queue *pQueue) {    pQueue = NULL;     } 函数内修改指针要么传指针引用，要么传二级指针。

user: user-0
content: 如果用pQueue = NULL; 来初始化，那么pQueue->number是不是没有初始化？

user: user-0
content: 谢谢楼上，我看到书上都是用pQueue->front = pQueue->tail = NULL;pQueue->number = 0;形式初始化队列。

user: user-4
content: 指针初始化为NULL没有问题，但是在用之前一般需要用malloc分配足够的空间。

user: user-0
content: 上面程序中有一处写错了，	struct stack *next; 应为struct node *next;

user: user-0
content: 谢谢各位，我认真体会下。
user-0 提问:  这个程序中的问题与C99标准有关系吗？

回复:
user: user-1
content: for(int i = 0; i < a; i++)             a += b;   a以步长5增长， i以步长1增长，初始时i为0，a为4，你认为这能追得上吗？ 追不上就一直到溢出为负数结束for循环。
user-0 提问: 这两个指针操作相似为什么有质的不同？

回复:
user: user-1
content: 类型上q是一个数组指针，*q相当于数组名，数组名是不可以作为左值的！ p是int *的，*p就是改变p所指向内存的值！

user: user-0
content: 哦，这样呀，谢谢！

user: user-2
content: *q = ar;*q表示向q指针指向的内存写入数据 但是q指向的内存只能存int类型的 明显 ar是不对的 ar是数组首地址啊  *p = ar[0];ar[0]表示已经取出数值了 而且也符合指针的类型  所以没问题
user-0 提问: C程序大赛其中的一个源代码

回复:
user: user-0
content: 怎么不发出来看看呀，

user: user-0
content: 漫画版的美少女，呵呵。

user: user-1
content: 这是一张美女脸，是不是。。

user: user-2
content: 引用 13 楼 zealoussnow 的回复:引用 1 楼 my_live_123 的回复:linux 下indent工具格式化一下，就成正规代码格式了。一切就一目了然了这个怕不好弄吧。。。 10l,我已经格式完喽

user: user-3
content: 读入文件，并输出剔除部分数据后输出。

user: user-4
content: 国外写代码那是兴趣，喜欢在上面倒腾，为啥我就没写代码的兴趣呢。

user: user-5
content: 编译成二进制，然后排成棵女的样子... 一样的闲的蛋疼

user: user-6
content: C语言怪异代码大赛历届作品大全 1984～1996，1998，2000，2001，2004～2006，2011，2012 http://download.csdn.net/detail/zhao4zhong1/5538847

user: user-7
content: 程序写好后专门用脚本处理的吧？ 可以看下淘宝首页的源码。

user: user-8
content: so chaos it is！

user: user-9
content: so beautiful the pic

user: user-10
content: 挺那个啥的。。。

user: user-11
content: 这是什么程序，写出来是完成什么事情？

user: user-12
content: 我说看一个akari能学到啥（

user: user-2
content: linux 下indent工具格式化一下，就成正规代码格式了。一切就一目了然了

user: user-13
content: 引用 1 楼 my_live_123 的回复:linux 下indent工具格式化一下，就成正规代码格式了。一切就一目了然了这个怕不好弄吧。。。

user: user-14
content: 看这样的代码有帮助吗？光花费在规整上的时间就占了大半吧。

user: user-0
content: 还是看不懂。

user: user-2
content: That's all!   #include<stdio.h> int main(int n, char **m) { 	FILE *p, *q; 	int A, k, a, r, i; 	char *d = "P%" "d\n%d\40%d" "\n%d\n\00wb+", b[1024], y[] = 		"yuriyurarararayuruyuri*daijiken**akkari~n**" 		"/y*u*k/riin<ty(uyr)g,aur,arr[a1r2a82*y2*/u*r{uyu}riOcyurhiyua**rrar+*arayra*=" 		"yuruyurwiyuriyurara'rariayuruyuriyuriyu>rarararayuruy9uriyu3riyurar_aBrMaPrOaWy^?" 		"*]/f]`;hvroai<dp/f*i*s/<ii(f)a{tpguat<cahfaurh(+uf)a;f}vivn+tf/g*`*w/jmaa+i`ni(" 		"i+k[>+b+i>++b++>l[rb"; 	int u; 	for (i = 0; i < 101; i++) 		y[i * 2] ^= 			"~hktrvg~dmG*eoa+%squ#l2" 			":(wn\"1l))v?wM353{/Y;lgcGp`vedllwudvOK`cct~[|ju {stkjalor(stwvne\"gt\"yogYURUYURI" 			[i] ^ y[i * 2 + 1] ^ 4; 	p = (n > 1 		 && (m[1][0] - '-' 			 || m[1][1] != '\0')) ? fopen(m[1], y + 298) : stdin; 	q = (n < 3 		 || !(m[2][0] - '-' || m[2][1])) ? stdout : fopen(m[2], d + 14); 	if (!p || !q) 		return +printf("Can " "not\x20open\40%s\40" "" "for\40%sing\n", 					   m[!p ? 1 : 2], !p ? "read" : "writ"); 	for (a = k = u = 0; y[u]; u = 2 + u) { 		y[k++] = y[u]; 	} 	if ((a = fread(b, 1, 1024, p)) > 2 && b[0] == 'P' 		&& 4 == sscanf(b, d, &k, &A, &i, &r) && !(k - 6 && k - 5) 		&& r == 255) { 		u = A; 		if (n > 3) { 			u++; 			i++; 		} 		fprintf(q, d, k, u >> 1, i >> 1, r); 		u = k - 5 ? 8 : 4; 		k = 3; 	} else 		{ 		(u) = +(n + 14 > 17) ? 8 / 4 : 8 * 5 / 4; 		} 	for (r = i = 0;;) { 		u *= 6; 		u += (n > 3 ? 1 : 0); 		if (y[u] & 01) 			fputc(1 * (r), q); 		if (y[u] & 16) 			k = A; 		if (y[u] & 2) 			k--; 		if (i == a) { 			i = a = (u) * 11 & 255; 			if (1 && 0 >= (a = fread(b, 1, 1024, p)) && 				")]i>(w)-;} {/i-f-(-m--M1-0.)<{" 				[8] == 59) 				break; 			i = 0; 		} 		r = b[i++]; 		u += (+8 & *(y + u)) ? (10 - 								r ? 4 : 2) : (y[u] & 4) ? (k ? 2 : 4) : 2; 		u = y[u] - (int) '`'; 	} fclose(p); 	k = +fclose(q); 	return k - -1 + (-0x01); 	{; 		{ 		} 	} 	;; }

user: user-0
content: 对了，忘了说了。我也不知能它干什么就是有点好奇，如果将来有一天有能力了，再来试一下。
user-0 提问: 请问迅雷里面的网页浏览

回复:
user: user-1
content: 如果你用mfc，可以用CHtmlView 。 可以直接用IWebBrowser接口，都是走的ie kernel

user: user-0
content: 引用 1 楼 user-3 的回复:web迅雷？ 不是web迅雷，就是迅雷下载程序中也可以浏览网页，是怎么做的

user: user-2
content: 是不是使用了webkit引擎？ 或者调用了ie内核? 不清楚，你得问迅雷

user: user-3
content: web迅雷？
user-0 提问: gdb提示：No symbol "expression" in current context.

回复:
user: user-1
content: 将expression改为myexp再试试看。

user: user-0
content: 引用 1 楼 user-2 的回复:没看到expression有什么问题呢 但是你的strcpy函数拷贝啥？operandString内容是什么？你又没赋值又没初始化！ 还有看看 拷贝会不会越界，每个够不够20个字节 operandString会被赋值的，这个strcpy在if里面的嘛，第一次循环不会进这个if的。  这不是重点，我关心的是gdb为什么说No symbol "expression" in current context.我打印的变量是存在的啊

user: user-2
content: 没看到expression有什么问题呢 但是你的strcpy函数拷贝啥？operandString内容是什么？你又没赋值又没初始化！ 还有看看 拷贝会不会越界，每个够不够20个字节