Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 关于windows下的开源库libmodbus的使用（ModBus协议）

回复:
user: user-0
content: 但是试了下，我倒是不缺stdintl.h文件，而它给的例子是用的是GCC的库函数，vc下就编译不过了。难道真要在GCC下。。。都没用过。

user: user-1
content: If you want to compile with Microsoft Visual Studio, you need to install <http://code.google.com/p/msinttypes/> to fill the absence of stdint.h.  To compile under Windows, install [MinGW](http://www.mingw.org/) and MSYS then select the common packages (gcc, automake, libtool, etc). The directory `./src/win32/` contains a Visual C project.  这两段是关键
user-0 提问: computer graphics with openGL 4th edition 

回复:
user: user-1
content: 楼主，您下载到了么，也给我一个份individual2499@163.com

user: user-2
content: 楼主，你下载到了吗，有的话给我一份xusiwei2136@163.com，谢谢

user: user-2
content: 要填一个调查，结果“您所在地区不支持”
user-0 提问: 在线等啊 新手请教 求帮忙

回复:
user: user-1
content: 酱油党路过~~~

user: user-0
content: 引用 2 楼 q745401990 的回复: #include "stdio.h" void main() { char i,j,k; // 三层遍历，不可重复 for(i='x';i<='z';i++)     for(j='x';j<='z';j++)         if(i!=j)// 排除第一种重复情况           {       			for(k='x';k<='z';k++)     			 {        				 if(i!=k&&j!=k)// 排除第二种重复情况 					{ 						// A说他不和X比，C说他不和X、Z比 						// 排除这些情况  							if(i!='x'&&k!='x'&&k!='z')  							printf("a--%c,b--%c,c--%c",i,j,k); 					} 				}     	 } }谢谢啊

user: user-0
content: 引用 1 楼 user-3 的回复:再加一层嵌套 这就是一个示例程序 就事论事 并不是一个通用的解决方案 所以这里没什么好纠结的 谢谢啊 这几天比较忙，没来得及回复。

user: user-2
content: 引用 4 楼 u011408601 的回复:[quote=引用 2 楼 q745401990 的回复:]  #include "stdio.h" void main() { char i,j,k; // 三层遍历，不可重复 for(i='x';i<='z';i++)     for(j='x';j<='z';j++)         if(i!=j)// 排除第一种重复情况           {       			for(k='x';k<='z';k++)     			 {        				 if(i!=k&&j!=k)// 排除第二种重复情况 					{ 						// A说他不和X比，C说他不和X、Z比 						// 排除这些情况  							if(i!='x'&&k!='x'&&k!='z')  							printf("a--%c,b--%c,c--%c",i,j,k); 					} 				}     	 } }谢谢啊 [/quote]  可以结贴了

user: user-3
content: 再加一层嵌套 这就是一个示例程序 就事论事 并不是一个通用的解决方案 所以这里没什么好纠结的

user: user-2
content: #include "stdio.h" void main() { char i,j,k; // 三层遍历，不可重复 for(i='x';i<='z';i++)     for(j='x';j<='z';j++)         if(i!=j)// 排除第一种重复情况           {       			for(k='x';k<='z';k++)     			 {        				 if(i!=k&&j!=k)// 排除第二种重复情况 					{ 						// A说他不和X比，C说他不和X、Z比 						// 排除这些情况  							if(i!='x'&&k!='x'&&k!='z')  							printf("a--%c,b--%c,c--%c",i,j,k); 					} 				}     	 } }
user-0 提问: [下面的框架可能不正确和/或缺失，没有为 highgui100.dll 加载符号]	

回复:
user: user-1
content: 0、要联网 1、点 调试 2、然后 选项和设置 3、把微软符号服务器勾 4、运行的时候等一下 会从微软下载符号！！

user: user-2
content: 这个问题 ‘Debug下正常  Release下不正常

user: user-3
content: 我也遇到这个问题了，求答复

user: user-4
content: 是啊，同求，我也很着急的。

user: user-5
content: 解决的话求回复，我也的苦恼中

user: user-6
content: 我也是   你解决了吗

user: user-7
content: 我也是这个问题！！！

user: user-8
content: 我也是这个问题呢

user: user-9
content: 楼主问题解决没有？我也遇上这样的问题了！！

user: user-10
content: 没符号不会调试汇编指令吗？

user: user-11
content: highgui100.dll是 Release 版，不可调试

user: user-0
content: 就是这样子啊

user: user-12
content: 引用 13 楼 u013262531 的回复:引用 11 楼 user-12 的回复:[quote=引用 10 楼 u013262531 的回复:] [quote=引用 7 楼 user-12 的回复:] 需要提供pdb文件方便调试，没有的话，只能看汇编码了。怎么弄这个pdb文件啊？ 编译时代码是选择输出pdb [/quote]参数和你的一样··我一一核对了··[/quote]  说的是highgui100.dll的pdb。

user: user-0
content: 引用 11 楼 user-12 的回复:引用 10 楼 u013262531 的回复:[quote=引用 7 楼 user-12 的回复:] 需要提供pdb文件方便调试，没有的话，只能看汇编码了。怎么弄这个pdb文件啊？ 编译时代码是选择输出pdb [/quote]参数和你的一样··我一一核对了··

user: user-12
content: 引用 11 楼 user-12 的回复:引用 10 楼 u013262531 的回复:[quote=引用 7 楼 user-12 的回复:] 需要提供pdb文件方便调试，没有的话，只能看汇编码了。怎么弄这个pdb文件啊？ 编译时代码是选择输出pdb [/quote] 另外把pdb所在的路径添加到symbol路径中：

user: user-12
content: 引用 10 楼 u013262531 的回复:引用 7 楼 user-12 的回复:需要提供pdb文件方便调试，没有的话，只能看汇编码了。怎么弄这个pdb文件啊？ 编译时代码是选择输出pdb

user: user-0
content: 引用 7 楼 user-12 的回复:需要提供pdb文件方便调试，没有的话，只能看汇编码了。怎么弄这个pdb文件啊？

user: user-0
content: 除此以外 还出现了  	cxcore100.dll!10011cf0() 	  	[下面的框架可能不正确和/或缺失，没有为 cxcore100.dll 加载符号]	 >	VideoCapture.exe!vedio::captrue(_IplImage * pImg_org=0x012e0000)  行184 + 0x9 字节	C++  	ffffffff()	  还有kenel.dll也出现问题

user: user-10
content: 重建所有试试。

user: user-12
content: 需要提供pdb文件方便调试，没有的话，只能看汇编码了。
user-0 提问: 不用函数；写字符串的长度，连接，复制，查找，比较

回复:
user: user-1
content: 借楼上,你在测试的时候把 __cdecl去掉应该是可以的

user: user-1
content: char * __cdecl strcat (         char * dst,         const char * src         ) {         char * cp = dst;          while( *cp )                 cp++;                   /* find end of dst */          while( *cp++ = *src++ ) ;       /* Copy src to end of dst */          return( dst );                  /* return dst */  }  char * __cdecl strcpy(char * dst, const char * src) {         char * cp = dst;          while( *cp++ = *src++ )                 ;               /* Copy src over dst */          return( dst ); }  int __cdecl strcmp (         const char * src,         const char * dst         ) {         int ret = 0 ;          while( ! (ret = *(unsigned char *)src - *(unsigned char *)dst)   && *dst)                 ++src, ++dst;          if ( ret < 0 )                 ret = -1 ;         else if ( ret > 0 )                 ret = 1 ;          return( ret ); }  size_t __cdecl strlen (         const char * str         ) {         const char *eos = str;          while( *eos++ ) ;          return( eos - str - 1 ); }  char * __cdecl strstr (         const char * str1,         const char * str2         ) {         char *cp = (char *) str1;         char *s1, *s2;          if ( !*str2 )             return((char *)str1);          while (*cp)         {                 s1 = cp;                 s2 = (char *) str2;                  while ( *s1 && *s2 && !(*s1-*s2) )                         s1++, s2++;                  if (!*s2)                         return(cp);                  cp++;         }          return(NULL);  } 我把源码都给你贴上吧

user: user-2
content: 看下函数内部的实现不就可以了么，好像都是内联汇编

user: user-3
content: 复制帮你写个，我可没验证噢   void strcpy(char *dst, const char *src) {     while (*dst++ = *src++); }
user-0 提问: C语言怎样除去数组字符串的特殊字符

回复:
user: user-1
content: 用ctype.h中库函数可以判断字符是不是数字int isdigit(int c)， isalpha判断是不是英文字母，可以看一下。

user: user-2
content: 引用 2 楼 q745401990 的回复:void squeeze(char s[],int c)  {      int i,j;      for (i = 0, j = 0; s[i] != '\0'; i++)      {          if (s[i] != c)          {              s[j++] = s[i];          }      }      s[j] = '\0'; }   没有就自己写呗  除去字符串s 中的字符c

user: user-2
content: void squeeze(char s[],int c)  {      int i,j;      for (i = 0, j = 0; s[i] != '\0'; i++)      {          if (s[i] != c)          {              s[j++] = s[i];          }      }      s[j] = '\0'; }   没有就自己写呗

user: user-3
content: 用一个指针把它找到，然后可以让后面的向前移动（覆盖掉“，”）

user: user-4
content: 没有，后面的字凑6个字

user: user-5
content: void strcpybutcomma(char *t,char *s) {     char c;      while (1) {         c = *s++;         if (','!=c) *t++ = c;         if (0==c) break;     } }
user-0 提问: c语言如何实现二叉树的顺序存储？

回复:
user: user-1
content: 用一个数组 记录好父子节点位置下标就行了

user: user-2

user: user-3
content: 既然是完全二叉树那用数组就可以了啊  假设根结点是0 那么一个结点其左孩子 且该结点的在数组中下标为n 则其左孩子的下标为2*n+1 而右孩子的下标为 2*n+2  因为是完全二叉树 所以使用这种方法应该是非常好的  之所以使用指针实现树是因为大多数树并不是满树或者完全二叉树 所以会造成大量空间浪费 而对于满树和完全二叉树当然使用数组实现最好

user: user-4
content: 引用 楼主 xyf12344 的回复:如题。。。老师布置的任务， 我的想法是，先写一个头文件，定义一个struct bitnode {} 然后，再定义一个 struct tree{}。 但是在c文件实现中，不知道如何下手。。。。求高手赐教 看一下二叉堆的存储方式就会了！

user: user-5
content: 在一棵n个结点的完全二叉树中，从树根起，自上层到下层，每层从左至右，给所有结点编号，能得到一个反映整个二叉树结构的线性序列。  然后用一个数组存起来就可以了

user: user-0
content: 后来，老师要求的是一个完全二叉树

user: user-6
content: 维基百科。。。
user-0 提问: 没有语法错误 为什么会出现这种情况

回复:
user: user-0
content: 引用 5 楼 max_min_ 的回复:   aver(a);//调用   ps:检查scanf函数的返回值！ 恩 调用的地方弄明白了 但是您说的检查scanf函数的返回值是什么意思呢 菜鸟见谅

user: user-1
content: 崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。

user: user-0
content: 引用 6 楼 a345485527 的回复:[quote=引用 4 楼 b372119132 的回复:] [quote=引用 2 楼 gerrard0616 的回复:] aver(a[2][2]);//调用 这里lz要传入数组吧，换成aver(a); a[2][2]是指数组中的单个元素 可是我记得老师讲的时候说的是如果是二维数组的话 前面括号里的数字可以省略 后面的不能省略 就是这样的形式：a[][x];[/quote] 这个指的是形参，不是实参[/quote] 谢谢了！

user: user-2
content: 引用 4 楼 b372119132 的回复:[quote=引用 2 楼 gerrard0616 的回复:] aver(a[2][2]);//调用 这里lz要传入数组吧，换成aver(a); a[2][2]是指数组中的单个元素 可是我记得老师讲的时候说的是如果是二维数组的话 前面括号里的数字可以省略 后面的不能省略 就是这样的形式：a[][x];[/quote] 这个指的是形参，不是实参

user: user-3
content: aver(a);//调用   ps:检查scanf函数的返回值！

user: user-0
content: 引用 2 楼 gerrard0616 的回复:aver(a[2][2]);//调用 这里lz要传入数组吧，换成aver(a); a[2][2]是指数组中的单个元素 可是我记得老师讲的时候说的是如果是二维数组的话 前面括号里的数字可以省略 后面的不能省略 就是这样的形式：a[][x];

user: user-2
content: 怎么会不报错呢，看这个/**/部分  /*求平均数*/ # include <stdio.h>  int i = 0, j = 0; int c[2];   void aver(int b[2][2]);//声明放到Main函数外 int main() { 	 	int a[2][2]; 	for (i = 0; i < 2; i++) 		for (j = 0; j < 2; j++) 			scanf("%d",&a[i][j]);//输入4个数字  	/*这里调用*/ 	aver(a);//调用 	for (i = 0; i < 2; i++) 		printf("%3d",c[i]);  	return 0; }  /*形参*/ /*不一定非要这么写*/ void aver(int b[][2]) { 	int sum = 0; 	for (i = 0; i < 2; i++) 	{ 		for (j = 0; j < 2; j++) 			sum = sum + b[i][j]; 		c[i] = sum/2;//求平均后赋值给c数组 		sum = 0;//归零 	}  }

user: user-4
content: aver(a[2][2]);//调用 这里lz要传入数组吧，换成aver(a); a[2][2]是指数组中的单个元素

user: user-0
content: 我说没有语法错误的意思是  没有报错
user-0 提问: C中\t和\n 的区别

回复:
user: user-1
content: 这个问题完全可以在网上google下！ 都有详细的说明已经附带例程的！

user: user-2
content: 引用 2 楼 a345485527 的回复:\t:水平制表（跳到下一个Tab位置） \r:回车，将当前位置移到本行开头 \n:换行  mark一下

user: user-3
content: \r:回车，将当前位置移到本行开头 \n:换行，并且可以刷新缓冲区

user: user-4
content: \n new line

user: user-4
content: \t tab \n next line \r return

user: user-5
content: t不换行 n换行

user: user-6
content: \r：回车，相当于光标回到本行首位置，不会换行；另外有一个\n，换行，表示光标换到下一行；因此在windows下通常使用\r\n，表示回车换行，即光标到第二行的首位置，相当于按了键盘上的Enter键（有些是标为return键） \t: 水平制表符，相当于按了键盘上的TAB按键，通常宽度相当于8个空格的位置，但有些软件允许设置tab的宽度。

user: user-7
content: 楼上++  \t相当于你按下TAB键的效果 一般是后移一段位置  \n是换行 也就是进入到下一行

user: user-8
content: \t:水平制表（跳到下一个Tab位置） \r:回车，将当前位置移到本行开头 \n:换行

user: user-9
content: \r 回车 　　\t 跳格  文本中换行： 		CFile file; 		file.Open(szPath, CFile::modeWrite | CFile::modeCreate); 		char newLine[2] = {13, 10}; 		file.Write(newLine, 2);					//换行 这是我对\n \t的理解

user: user-10
content: printf一下就知道了啊 制表符和换行符

user: user-11
content: \r 回车  \t 跳格
user-0 提问: C语言正则表达式

回复:
user: user-1
content: 正则表达式速查 正则表达式举例 正则表达式学习 (4页A4纸)http://download.csdn.net/detail/zhao4zhong1/1808549

user: user-1
content: 推荐使用regtest软件。

user: user-0
content: 引用 2 楼 gongheguoyingpai11 的回复:[^_][a-zA-Z0-9]+  貌似是因为这个地方的原因 这里[^_]需要匹配一个除_之外的字符 [a-zA-Z0-9]+需要匹配一个处于a-z或A-Z或0-9的字符 所以此处需要匹配两个字符 而在第二个匹配中此处只有r一个字符 所以不匹配  将[a-zA-Z0-9]+改为[a-zA-Z0-9]*应该就可以了  [a-zA-Z0-9]+需要匹配一个处于a-z或A-Z或0-9的字符 所以此处需要匹配两个字符?  大神 这个地方为什么必须要匹配两个字符吗？

user: user-2
content: [^_][a-zA-Z0-9]+  貌似是因为这个地方的原因 这里[^_]需要匹配一个除_之外的字符 [a-zA-Z0-9]+需要匹配一个处于a-z或A-Z或0-9的字符 所以此处需要匹配两个字符 而在第二个匹配中此处只有r一个字符 所以不匹配  将[a-zA-Z0-9]+改为[a-zA-Z0-9]*应该就可以了

user: user-3
content: 貌似两个串格式基本一样的说。

user: user-0
content: 引用 7 楼 zhao4zhong1 的回复:http://www.baidu.com/s?wd=regtest&rsv_bp=0&ch=&tn=baidu&bar=&rsv_spt=3&ie=utf-8&rsv_sug3=7&rsv_sug1=7&rsv_sug4=95&rsv_sug=0&inputT=2422   呃呃呃。我在百度下载了好几个了，都不好用或者说我没用明白，总之就是我的代码能运行成功，但是这个软件却不行。。。。。咋办呐

user: user-1
content: http://www.baidu.com/s?wd=regtest&rsv_bp=0&ch=&tn=baidu&bar=&rsv_spt=3&ie=utf-8&rsv_sug3=7&rsv_sug1=7&rsv_sug4=95&rsv_sug=0&inputT=2422

user: user-0
content: 引用 4 楼 zhao4zhong1 的回复:推荐使用regtest软件。  我下了好几个软件，不过我感觉好像都不是C语言的啊是我用的不对还是怎么？

user: user-2
content: 引用 3 楼 laoyaoyaoyaoyao 的回复:[quote=引用 2 楼 gongheguoyingpai11 的回复:] [^_][a-zA-Z0-9]+  貌似是因为这个地方的原因 这里[^_]需要匹配一个除_之外的字符 [a-zA-Z0-9]+需要匹配一个处于a-z或A-Z或0-9的字符 所以此处需要匹配两个字符 而在第二个匹配中此处只有r一个字符 所以不匹配  将[a-zA-Z0-9]+改为[a-zA-Z0-9]*应该就可以了  [a-zA-Z0-9]+需要匹配一个处于a-z或A-Z或0-9的字符 所以此处需要匹配两个字符?  大神 这个地方为什么必须要匹配两个字符吗？  [/quote] [^-]因为没有数量修饰符 所以采取顺序匹配所以这里是必须匹配一个字符的 而[a-zA-Z0-9]+中的加号是匹配一个或多个字符 所以这里也必须至少匹配一个字符 所以[^_][a-zA-Z0-9]+至少需要匹配两个字符
user-0 提问: 哈夫曼编码译码，哪位大神帮我做一下吧

回复:
user: user-1
content: 作业，不用那么完美，直接用二叉树做，虽然用数组，可能更好。

user: user-0
content: 60以下：有下列情况之一者成绩为不及格： (1)独立工作能力很差；没有完成设计的基本要求的内容；程序结构不合理。 (2)在设计中有严重的违反纪律或抄袭他人设计和成果。 (3)无故不提交设计。

user: user-0
content: 都不太准确的，

user: user-2
content: 百度上有很多这个代码~~可以查一下~~

user: user-0
content: 帮帮忙吧,我需要代码。

user: user-0
content: 呵呵，不会写，而且后天要交了哦。

user: user-3
content: 这个程序上来讲不是很难，主要是要有信息论与编码的基础，建议楼主自己试着写一下
user-0 提问: 课程设计，大神帮帮忙

回复:
user: user-0
content: 引用 6 楼 q745401990 的回复:http://write.blog.csdn.net/postlist/0/0/enabled/3  仔细看看我的博客 谢谢，看了你的博客不错哦，对不起我不小心按错了，按到丢个板砖

user: user-0
content: [quote=引用 5 楼 paopaozai 的回复:] 1）随机数产生函数；    用srand rand 2）程序运行时间统计函数。    运行前后各取一次时间相减就可以了。 谢谢，我排序的的代码我会，学过了，就你说的这两个问题不会，请问在哪有详细的说明

user: user-1
content: 1）随机数产生函数；    用srand rand 2）程序运行时间统计函数。    运行前后各取一次时间相减就可以了。

user: user-2
content: http://write.blog.csdn.net/postlist/0/0/enabled/3  仔细看看我的博客

user: user-3
content: 貌似蛮简单的

user: user-4
content: 都是 书上的知识

user: user-5
content: google下 排序算法  很多例程的，一般都会提供4种以上的! 自己动手吧！

user: user-0
content: 要求用c和数据结构
user-0 提问: c语言求字符串中最长单词并输出

回复:
user: user-1
content: 代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试是程序员必须掌握的技能之一。

user: user-2
content: #include <stdio.h>  void longest(char* str) { 	int i = 0; 	int j = 0; 	int len = 0; 	int d = 0; 	int length = strlen(str);  	for (i = 0; i < length; i++) 	{ 		j = 0; 		while ((str[i + j] != ' ') &&  (i + j <= length - 1)) 		{ 			j++; 		}  		if(len < j) 		{ 			len = j; 			d = i; 		}  		if( i + j > length - 1) 		{ 			break; 		} 	} 	for (i = d; i < d + len; i++ ) 	{ 			printf("%c", str[i]); 	} 	printf("\n"); 	 }  int main() {  	char test[80]; 	gets(test); 	longest(test); 	system("pause"); }  按你的思路，是这样的吧

user: user-3
content: longest()里循环的k值有什么用~~没看懂~~

user: user-2
content: 我刚才试了一下你的代码，漏洞百出啊

user: user-4
content: #include <stdio.h> #include <stdlib.h>   void longest(char *a) {     int i=0,pos = 0,len=0,len_max=0;          for(i=0;i<strlen(a);i++)     {         if(a[i] != ' ')             len++;         else         {             if(len > len_max)             {                 len_max = len;                 pos = i-len;             }             len=0;         }     } 	     for(i=pos;i<pos+len_max;i++) 	printf("%c",a[i]);     printf("\n"); }  void main() {     char *haha = "wo cao ni tamade da sao bi";     longest(haha); }

user: user-0
content: while循环中加个限制条件 if (i + j > strlen(s) - 1)     break; 在做修改if的括号后，还是得不到正确的单词

user: user-4
content: while(a[i]!=' ')     j++; 这不是一个死循环吗？

user: user-0
content: 为什么总是出现烫字

user: user-0
content: 也不是！！！

user: user-2
content: 额，strlen（a）。

user: user-0
content: 不对呀！！！

user: user-2
content: while循环中加个限制条件 if (i + j > strlen(s) - 1)     break; 试试  我觉得根本用不了这么多变量

user: user-0
content: 就是输不出来单词，怎么解呀！！！

user: user-2
content: 是不是死循环？最后一个单词的时候怎么终止循环？

user: user-0
content: c语言字符串输出最长的单词为什么输不出来（单词之间以空格表示）
user-0 提问: 那位高手帮忙看下下面的if else 如何配对的，我看的迷糊了

回复:
user: user-1
content: 引用 6 楼 zhao4zhong1 的回复:在VS IDE中，选中要自动排版的代码片断，按Alt+F8  为什么我按了没反应,没能自动排序。

user: user-2
content: 最近的为一对

user: user-3
content: #include<stdio.h>  int main(void)  {   int a =1;  int b=3;  int c=5;  int d=4;  int x;  if(a<b)  {   if(c<d)   {     x=1;   }   else   {     if(a<c)     {       if(b<d)       {         x=2;       }       else       {         x=3;       }      }      else      {        x=6;      }     }  }  else  {    x=7;      }  printf("%d\n",x);  }

user: user-4
content: else只会和它最近的if配对~~~

user: user-5
content: 引用 14 楼 anan870622 的回复:[quote=引用 6 楼 zhao4zhong1 的回复:] 在VS IDE中，选中要自动排版的代码片断，按Alt+F8  为什么我按了没反应,没能自动排序。[/quote] 有可能ALt+F8这个热键被QQ啥的软件给劫持了。

user: user-6
content: 在没有括号情况下,else是和它上面最近一个没有匹配的if搭配的吧

user: user-7
content: int a =1; int b=3; int c=5; int d=4; int x; if(a<b) {   if(c<d)   {     x=1;   }   else   {     if(a<c)     {       if(b<d)       {         x=2;       }       else        {         x=3;       }     }     else      {       x=6;     }   } } else  {   x=7; } printf("%d\n",x);  刚才没排好

user: user-7
content: int a =1; int b=3; int c=5; int d=4; int x; if(a<b) { 	if(c<d) 	{ 		x=1; 	} 	else 	{ 		if(a<c) 		{ 			if(b<d) 			{ 				x=2; 			}     	else      	{     		x=3;     	}     } 		else  		{ 			x=6; 		} 	} } else  { 	x=7; } printf("%d\n",x);

user: user-8
content: 楼主发2个帖子都没结过，真让人着急啊。。。。

user: user-9
content: 你排一下版就知道了

user: user-5
content: 在VS IDE中，选中要自动排版的代码片断，按Alt+F8

user: user-10
content: 都加上大括号，再来一下缩进就明白了

user: user-11
content: 在vi中，gg = G 自动排版就很清楚了：  #include<stdio.h> int main(void) {      int a =1;     int b=3;     int c=5;     int d=4;     int x;     if(a<b)         if(c<d)x=1;         else             if(a<c)                 if(b<d)x=2;                 else x=3;             else x=6;     else x=7;     printf("%d\n",x);     return 0; }  引用 楼主 u012453630 的回复:#include<stdio.h> int main(void) {  	int a =1; 	int b=3; 	int c=5; 	int d=4; 	int x; 	if(a<b) 	if(c<d)x=1; 	else 	if(a<c) 	if(b<d)x=2;     else x=3; 	else x=6; 	else x=7; 	printf("%d\n",x);

user: user-8
content: #include<stdio.h> int main(void) {     int a =1;     int b=3;     int c=5;     int d=4;     int x;     if(a<b)     {         if(c<d)             x=1;         else         {             if(a<c)             {                 if(b<d)                     x=2;                 else                      x=3;             }             else                  x=6;          }     }     else      {         x=7;     }     printf("%d\n",x);      getchar ();     return 0; }  括号配合缩进，楼主看明白没有？你的括号加错了

user: user-12
content: 编辑器里排版一下...

user: user-0
content: #include<stdio.h> int main(void) {  	int a =1; 	int b=3; 	int c=5; 	int d=4; 	int x; 	if(a<b) 	{  	 	if(c<d) 		x=1; 	} 	else 	{     if(a<c) 	if(b<d) 		x=2;          }     else x=3; 	 	else x=6; 	else x=7; 	printf("%d\n",x);     	 	getchar (); 	return 0; 	  }   我是这么看的不知道我的正确不我用{}把语句分离开了 貌似这样看的话 最下面的两个else 好像一点用也没有

user: user-8
content: 引用 7 楼 u012453630 的回复:gg = G  是啥 他是说的vim的快捷键，gg是到文件头，G是到文件尾，=是格式化代码，自动加了缩进的

user: user-0
content: gg = G  是啥
user-0 提问: deflateInit2----------文件压缩    

回复:
user: user-0
content: 哦，自己加头和尾啊！谢谢！！！！

user: user-0
content: 引用 1 楼 user-1 的回复:deflate 的函数只是用来压缩数据的，要使用 gz 的文件格式，参考 minigzip.c (已在zlib中包含) minigzip.c中使用的是gz开头的函数。这个压缩后文件是gz格式的。可以用gzip -d 解压。但好像压缩后的字节数跟用命令gzip 压缩的差几个字节。。  如果要用deflate压缩的话，书不是要自己加上gzip头和gzip尾成为gz的文件格式？

user: user-1
content: 有几个字节的误差很正常...毕竟不是一样的实现... 自己用 deflate 的话，就需要自己加文件头了

user: user-1
content: deflate 的函数只是用来压缩数据的，要使用 gz 的文件格式，参考 minigzip.c (已在zlib中包含)
user-0 提问: 网络发送视频数据，数据量大的时候，VLC接收的时候会花屏

回复:
user: user-1
content: 楼主问题解决了吗，求告知思路，给新人指路....

user: user-0
content: 挥泪求高手啊。刚开始上CSDN，可能有写规矩还不懂。

user: user-0
content: 引用 2 楼 max_min_ 的回复:花屏就是丢帧了阿！ 看看你rtsp开的buf缓冲区是不是小了，开大点试试！  我在发送之前将数据写下来，写下的数据是完整的帧，套接字选项设置的是128K的buf，请问大侠，还有什么需要注意的地方吗，我对套接字选项这块还在学习中。。。

user: user-2
content: 花屏就是丢帧了阿！ 看看你rtsp开的buf缓冲区是不是小了，开大点试试！

user: user-3
content: 我今天也遇到这个了，播放了一会就出问题了，不过我1080P的RTP流倒是不大，200kb/s应该是够了~
user-0 提问: c嵌套循环文件

回复:
user: user-0
content: [quote=引用 3 楼 turingo 的回复:] 1、先把关键词文件中关键词都读出来，存放到一个数组中； 2、打开其它文件，与关键词数组进行比较和统计。 这样不会频繁的访问的关键词文件，可以提高执行效率，另外字符串比较用strcmp函数。   可否给个例子看看能

user: user-1
content: 1、先把关键词文件中关键词都读出来，存放到一个数组中； 2、打开其它文件，与关键词数组进行比较和统计。 这样不会频繁的访问的关键词文件，可以提高执行效率，另外字符串比较用strcmp函数。  引用 2 楼 u013231454 的回复:[quote=引用 1 楼 turingo 的回复:] 用fseek重置fp2的指针，因为第一次fp2已经到文件尾部，所以你得fseek回来。  [quote=引用 楼主 u013231454 的回复:] while (!feof(fp)) 	{ 		fscanf(fp, "%s", &key); 		printf("key = %s\n", key); 		while (!feof(fp2)) 		{ 			fscanf(fp2, "%s", &key2); 			printf("key2 = %s\n", key2); 			// if (strcmp(key, key2) == 0) 			// { 			// 	printf("!124124\n"); 				 			// } 		} 		 	} 如上面的代码,外层一次,里层的一直循环完,但是外层第二次循环的时候 里层一次都不循环了,这是什么问题呢>>>求解[/quote] 高手,你一直解答我的问题呢,谢谢了.想问问你懂怎么写读取两个文件. 其中一个是关键字的文件,另一个是一个普通的程序文件,想知道关键字 文件里的关键字在程序文件出现了多少次...[/quote]

user: user-0
content: 引用 1 楼 turingo 的回复:用fseek重置fp2的指针，因为第一次fp2已经到文件尾部，所以你得fseek回来。  [quote=引用 楼主 u013231454 的回复:] while (!feof(fp)) 	{ 		fscanf(fp, "%s", &key); 		printf("key = %s\n", key); 		while (!feof(fp2)) 		{ 			fscanf(fp2, "%s", &key2); 			printf("key2 = %s\n", key2); 			// if (strcmp(key, key2) == 0) 			// { 			// 	printf("!124124\n"); 				 			// } 		} 		 	} 如上面的代码,外层一次,里层的一直循环完,但是外层第二次循环的时候 里层一次都不循环了,这是什么问题呢>>>求解[/quote] 高手,你一直解答我的问题呢,谢谢了.想问问你懂怎么写读取两个文件. 其中一个是关键字的文件,另一个是一个普通的程序文件,想知道关键字 文件里的关键字在程序文件出现了多少次...

user: user-1
content: 用fseek重置fp2的指针，因为第一次fp2已经到文件尾部，所以你得fseek回来。  引用 楼主 u013231454 的回复:while (!feof(fp)) 	{ 		fscanf(fp, "%s", &key); 		printf("key = %s\n", key); 		while (!feof(fp2)) 		{ 			fscanf(fp2, "%s", &key2); 			printf("key2 = %s\n", key2); 			// if (strcmp(key, key2) == 0) 			// { 			// 	printf("!124124\n"); 				 			// } 		} 		 	} 如上面的代码,外层一次,里层的一直循环完,但是外层第二次循环的时候 里层一次都不循环了,这是什么问题呢>>>求解
user-0 提问: 年终散分＋展示浮点数格式C代码

回复:
user: user-0
content: 引用 6 楼 derekrose 的回复:老师年终奖准备拿多少 今年的年终奖在哪里？

user: user-1

user: user-2

user: user-3
content: 碉堡了 引用 33 楼 SKATE11 的回复:智者的梦再美，也不如愚人实干的步伐！ 讲一千遍理论，不如写一行代码！  任何语言不落实到实际行动上都等于白说， 没读过MSDN例子代码的程序员实在让人感到可怕！  用C语言1000行源码能完成的工作千万不要用C++重写， 整天把高级技术放在嘴边那是一种浮夸！  少年啊，千万要重视单步调试和设置断点， 用VC调试时记得按下Alt+5、Alt+6、Alt+7和Alt+8。   对学习编程者的忠告： 眼过千遍不如手过一遍！ 书看千行不如手敲一行！ 手敲千行不如单步一行！ 单步源代码千行不如单步对应汇编一行！  VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和 寄存器变化，这样过一遍不就啥都明白了吗。 对VC来说，所谓‘调试时’就是编译连接通过以后，按F10或F11键单步执行一步以后的时候，或者在某行按F9设了断点后按F5执行停在该断点处的时 候。  不要迷信书、考题、老师、回帖； 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实！  有人说一套做一套，你相信他说的还是相信他做的？ 其实严格来说这个世界上古往今来所有人都是说一套做一套，不是吗？  不要写连自己也预测不了结果的代码！  电脑内存或文件内容只是一个一维二进制字节数组及其对应的二进制地址； 人脑才将电脑内存或文件内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文 字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针 的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……  进程都退出了，输入缓冲区刷不刷新都无关痛痒。  不要企图优雅的结束（因为这是不可能办到的） 而要在烂的不能再烂的摊子上也能重整河山！  这个世界上最大的差别和最远的距离都存在于“说”和“做”之间。 常立志不如立长志，立长志不如立即干！  崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。  单步类的实例“构造”或“复制”或“作为函数参数”或“作为函数返回值返回”或“参加各种运算”或“退出作用域”的语句对应的汇编代码几步后，就会来到该类的“构造函数”或“复制构造函数”或“运算符重载”或“析构函数”对应的C/C++源代码处。   （Turbo C或Borland C用Turbo Debugger调试,Linux或Unix下用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。）  关于自己是否适合编程的很简单的测试： 在报纸或杂志上随便找一段约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

user: user-5

user: user-6
content: 以后跟着赵老师混了，

user: user-0
content: 引用 43 楼 u010142440 的回复:赵老师，我输入0.0，你的代码就错了哟 刚亲自试了，没错！ Input a float point number:0.0 f=0 hex=00 00 00 00 bin=00000000000000000000000000000000 bin=0 00000000   00000000000000000000000     + 0   -127 1.00000000000000000000000     + -127     1.00000000000000000000000  d=0 hex=00 00 00 00 00 00 00 00 bin=0000000000000000000000000000000000000000000000000000000000000000 bin=0 00000000000   0000000000000000000000000000000000000000000000000000     + 0     -1023 1.0000000000000000000000000000000000000000000000000000     + -1023       1.0000000000000000000000000000000000000000000000000000

user: user-7
content: 以后跟着赵老师混了，

user: user-8
content: 学习一下。。。。。

user: user-9
content: 赵老师，我输入0.0，你的代码就错了哟

user: user-10
content: 顶啊，楼主说的好啊，虽然没看懂啊，啦啦

user: user-11
content: rewind(stdin);之前没有fflush(stdin);，那会不会读到别人的东西啊

user: user-12

user: user-13
content: 怎么总是晚一步

user: user-14
content: 顶一下

user: user-15
content: 来接分

user: user-16

user: user-17
content: 我还以为是发年终呢

user: user-18
user-0 提问: 求给一份中文版的《The C Programming Language》

回复:
user: user-1
content: 同一楼   推荐《C和指针》  讲的比较细致并且内容也相对比较全 对指针的篇幅比较多 适合学习C语言的人

user: user-2
content: 引用 楼主 u012938896 的回复:我的邮箱1207100830@qq.com   谢谢 答案和书都发了，记得给分。lelieven@163.com

user: user-3
content: C Primer Plus 真的很不错。

user: user-4
content: http://download.csdn.net/detail/user-4/6333711 这本挺好的阿！
user-0 提问: printf （“”hello world“”）；细节问题

回复:
user: user-1
content: Linux下 写一个最简单的c程序  #include <stdio.h>  int  main(void) {     printf("hello world"); }  编译  然后输入strace  你的可执行文件 就可以看到整个执行调用了哪些系统函数了

user: user-2
content: debug跟踪

user: user-3
content: 关于int printf ( const char * format, ... )我觉得可以说两点： 1.依靠format中‘%d’等格式来确定参数然类型及个数，然后从栈中获得函数参数地址，这样实现了参数可变。 2.printf向标准流stdout写入内容，一般stdout默认为屏幕。

user: user-4
content: 系统调用，linux下应该是write，最后是走0x80中断

user: user-5
content: 我是业余我蹭分~~

user: user-6
content: 我觉得printf就是向终端写入字符串，应该会有open这个tty，然后将字符串write该tty之中吧，会将cpu交还给内核来访问终端程序

user: user-7
content: 看我的博客。

user: user-8
content: 智者的梦再美，也不如愚人实干的步伐！ 讲一千遍理论，不如写一行代码！  任何语言不落实到实际行动上都等于白说， 没读过MSDN例子代码的程序员实在让人感到可怕！  用C语言1000行源码能完成的工作千万不要用C++重写， 整天把高级技术放在嘴边那是一种浮夸！  少年啊，千万要重视单步调试和设置断点， 用VC调试时记得按下Alt+5、Alt+6、Alt+7和Alt+8。   对学习编程者的忠告： 眼过千遍不如手过一遍！ 书看千行不如手敲一行！ 手敲千行不如单步一行！ 单步源代码千行不如单步对应汇编一行！  VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和 寄存器变化，这样过一遍不就啥都明白了吗。 对VC来说，所谓‘调试时’就是编译连接通过以后，按F10或F11键单步执行一步以后的时候，或者在某行按F9设了断点后按F5执行停在该断点处的时 候。  不要迷信书、考题、老师、回帖； 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实！  有人说一套做一套，你相信他说的还是相信他做的？ 其实严格来说这个世界上古往今来所有人都是说一套做一套，不是吗？  不要写连自己也预测不了结果的代码！  电脑内存或文件内容只是一个一维二进制字节数组及其对应的二进制地址； 人脑才将电脑内存或文件内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文 字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针 的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……  进程都退出了，输入缓冲区刷不刷新都无关痛痒。  不要企图优雅的结束（因为这是不可能办到的） 而要在烂的不能再烂的摊子上也能重整河山！  这个世界上最大的差别和最远的距离都存在于“说”和“做”之间。 常立志不如立长志，立长志不如立即干！  崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。  单步类的实例“构造”或“复制”或“作为函数参数”或“作为函数返回值返回”或“参加各种运算”或“退出作用域”的语句对应的汇编代码几步后，就会来到该类的“构造函数”或“复制构造函数”或“运算符重载”或“析构函数”对应的C/C++源代码处。

user: user-9
content: 《程序员自我修养》开篇引出的问题

user: user-10
content: 你可以参阅一下glibc的printf，libapr里也有一段printf代码主要是向它的pool进行printf，相对比较简单。  printf会调用v(x)printf。  简单的来说就是爬字符串fmt，寻找‘%’根据其后的字符序列通过stdarg从堆栈里取出相应的变量，比如说char*，int等。然后格式化成文本模式，向控制台或者字符串数组进行打印。

user: user-11
content: 单步进入调试下

user: user-12
content: 看汇编啊

user: user-13
content: 参考http://blog.csdn.net/tcpipstack/article/details/8490811 参考http://blog.csdn.net/tcpipstack/article/details/8279584  引用 楼主 molebin 的回复:我想了解下 c语言里printf helloworld 的过程中 触发了哪些事件   是怎么个过程   大家可以各抒己见

user: user-14
content: 在VS IDE中，F11，Alt+8，F11或Shift+F11，……
user-0 提问: c字符窜判断

回复:
user: user-0
content: 引用 3 楼 starytx 的回复:字符串比较用strcmp，用“==”的说明该对象重载了“==”操作符，而指针的“==”意义是地址相等，key在这里表示的是字符数组key的首地址，而“if”是个常量字符串，这两个的首地址是不相同的，所以... 我感觉你说的对,但是刚接触c啊,一上来就写这东西有点难度,基础又没打扎实..-__-||我还要把他编译成 PHP能用的扩展呢...

user: user-1
content: "if" 表示一个数组， "if"[1] = 'f'

user: user-2
content: 字符串比较用strcmp，用“==”的说明该对象重载了“==”操作符，而指针的“==”意义是地址相等，key在这里表示的是字符数组key的首地址，而“if”是个常量字符串，这两个的首地址是不相同的，所以...

user: user-3
content: 改为if(strcmp(key, "if") == 0)  引用 楼主 u013231454 的回复:这是代码# include <stdio.h> # include <stdlib.h>  int main(void) { 	FILE *fp; 	char key[100]; 	fp = fopen("key.txt", "r");  	if (fp == NULL) 	{ 		printf("open the file failed\n"); 		system("pause"); 		return -1; 	}  	while (!feof(fp)) 	{ 		fscanf(fp, "%s", &key);  		if (key == "if") 		{ 			printf("!124124"); 		} 		printf("%s\n", key); 	}  	system("pause"); 	return 0; } 第一次输出的是if 但是判断key == "if" 为什么不行呢  这个是key.txt文件

user: user-4
content: 好像判断是字符串是否相等要用strcmp函数，不能用 ==;
user-0 提问: 未初始化的数组和初始化的数组在栈上是如何分配的

回复:
user: user-1
content: 果然不出我的所料。

user: user-0
content: 引用 8 楼 kunkun2013 的回复:我也推测一下 char data[300]={0}; 可能执行的操作是一个memcpy，第一个元素是0，其它的是默认值，长度是300。 char data[300]; data[299] = 50; lcdAdjustBacklight(data[299]); lcdAdjustBacklight有可能因为优化还是传值50，这时候data其实不存在。  单片机编程？在仿真器ide里，看看汇编可能更容易确定问题。 引用 8 楼 kunkun2013 的回复:我也推测一下 char data[300]={0}; 可能执行的操作是一个memcpy，第一个元素是0，其它的是默认值，长度是300。 char data[300]; data[299] = 50; lcdAdjustBacklight(data[299]); lcdAdjustBacklight有可能因为优化还是传值50，这时候data其实不存在。  单片机编程？在仿真器ide里，看看汇编可能更容易确定问题。  我去，脑子一热忘了看汇编代码了，被你言中了。char data[300]={0};的时候确实SP了这么多大小的内存空间，char data[300];却没有。显然被编译器优化掉了。 谢谢了,搞了一天了....

user: user-2
content: 我也推测一下 char data[300]={0}; 可能执行的操作是一个memcpy，第一个元素是0，其它的是默认值，长度是300。 char data[300]; data[299] = 50; lcdAdjustBacklight(data[299]); lcdAdjustBacklight有可能因为优化还是传值50，这时候data其实不存在。  单片机编程？在仿真器ide里，看看汇编可能更容易确定问题。

user: user-0
content: 引用 5 楼 baipv008 的回复:芯片的内存只剩200Bytes?这里指的是堆内存还是栈内存？栈内存的话，是怎么测出来只剩200Byte的？ 我这里是假设，因为没法测量，我给堆分配0x200字节，给栈分配0x400字节，其他程序用掉了很多栈空间，所以我分配一个300大小的数组会栈溢出。因为如果我把栈大小调大点，则不会溢出，有300字节的剩余栈内存可以分配。

user: user-1
content: 引用 4 楼 guojiaqi4 的回复:[quote=引用 2 楼 zhao4zhong1 的回复:] 无对应汇编指令，不调试C语句。 怎么讲？[/quote] 很多问题表面上是C语句出了问题，实际上是对应汇编指令出了问题。

user: user-3
content: 芯片的内存只剩200Bytes?这里指的是堆内存还是栈内存？栈内存的话，是怎么测出来只剩200Byte的？

user: user-0
content: 引用 2 楼 zhao4zhong1 的回复:无对应汇编指令，不调试C语句。 怎么讲？

user: user-0
content: 引用 1 楼 user-4 的回复:不科学啊，你用什么编译器？ Keil

user: user-1
content: 无对应汇编指令，不调试C语句。

user: user-4
content: 不科学啊，你用什么编译器？
user-0 提问: 关于存储单元~~~~

回复:
user: user-0
content: 测试了一遍，存储单元应该是32位，等于数据总线长度，所以改成 typedef struct bitstruct{  int b1:1;  int :30;  int b2:2;  }bitstruct;  证明了“一个位段必须存储在同一存储单元中，不能跨两个单元”是对的，b2存放在了第二个存储单元，是我对存储单元理解有问题。“2次总线长度读，然后拼凑到一起”恐怕不是这个答案的结果，但是非常感谢提出了总线长度。确实“要迷信CPU、编译器、调试器、运行结果。”但是大哥这个回答还真是难以接受。。

user: user-1
content: 不要迷信书、考题、老师、回帖； 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实！  有人说一套做一套，你相信他说的还是相信他做的？ 其实严格来说这个世界上古往今来所有人都是说一套做一套，不是吗？  不要写连自己也预测不了结果的代码！

user: user-2
content: 存储单元是按总线长度划分的，不是按字节划分的。无论怎么弄，读的时候总是按总线长度读，尽管后面的没用。比如，一个short跨了总线对齐，也是2次总线长度读，然后拼凑到一起。

user: user-0
content: 引用 1 楼 user-2 的回复:int:2，一方面表述的是存储位数，一方面它代表了一个2位的整数，这跟32位整数，8位整数一样。  在对它取值的时候，取出的是int，由于它是2位整数且高位位1，代表-2，取出来的int要进行补位。  这跟存储单元无关。读的时候是按int读的，然后进行与、位移、补位操作。 存放位段的时候，要满足条件：一个位段必须存储在同一存储单元中，不能跨两个单元，这怎么说？ 我理解的是，b2就应该占据第2个字节的开头，而不是第一个字节的最高位+第2个字节最低位

user: user-2
content: int:2，一方面表述的是存储位数，一方面它代表了一个2位的整数，这跟32位整数，8位整数一样。  在对它取值的时候，取出的是int，由于它是2位整数且高位位1，代表-2，取出来的int要进行补位。  这跟存储单元无关。读的时候是按int读的，然后进行与、位移、补位操作。
user-0 提问: ubuntu系统中没有图像处理库

回复:
user: user-1
content: 图像处理库指什么？ImageMagick？OpenCV？FreeImage？

user: user-2
content: 你说的是可视化的集成开发环境吧？？？？   Codeblocks就可以

user: user-3
content: 参考http://www.imagemagick.org/script/index.php  引用 楼主 xi__q 的回复:ubuntu系统中没有图像处理库，怎么做可以用gcc编辑器进行编译的时候，可以直接进行图像处理，

user: user-4
content: OpenCV？

user: user-5
content: Image Magick

user: user-6
content: 图像处理的库和系统没有关系的

user: user-7
content: OpenGL
user-0 提问: 跪求大神指点

回复:
user: user-1
content: 除了fun中的循环代码（条件判别和else语句段）中的问题外，lz思路的还是稍微有点问题的： 尽管除数递增的思路在这种规模的数据下不算坏，但是如果N是一个接近于2^21的素数是不是就差一点了，给lz个思路（当然，肯定还有更好的方法）： (1)因为N <= 2^21，所以必然有N的质因数 < 2^11（如果N有质因数的话） (2)先找出 < 2^11内所有的质数（不用担心，lz可以搜下素数筛选法，上界2048还是相当快的） (3)让N试着除以这些质数来分解N

user: user-0
content: 引用 楼主 u012961566 的回复:题目描述：  [001]质因数分解 [EASY] Time Limit: 1000 ms     Memory Limit: 65536 KB Total Submit: 934     Accepted: 309   Description 找出输入整数的所有质因数（包括重复质因数），并按从小到大的顺序依次输出。    Input 输入一组待分解整数，每个整数k占一行。 保证所有的输入数字1 <= k < 2^21     Output 输出每个输入整数的所有质因数（按因子从小到大的顺序输出），质因数之间用空格隔开。  (每个数后边跟个空格就行，结果只有一个数的时候也跟个空格)  Sample Input 4 7 12    Sample Output 2 2  7  2 2 3    下面是我写的代码：  #include<iostream> using namespace std; void fun(int n) { 	int i=2; 	if(n==1) 	{ 		cout<<1<<" "; 	} 	while(n>0) 	{ 		if(n%i!=0) 		{ 			i++; 		} 		else 		{ 			cout<<i<<" "; 			n=n/i; 			i=2; 		} 	} 	cout<<endl; } int main() { 	int n; 	while(cin>>n) 	{ 		fun(n); 	} 	return 0; }  但是提交之后总是显示 Time Limit Exceed错误   有谁知道的 帮下忙啦 小弟第一次发帖 求关照 谢谢 不用辗转相处，如何处理大数的质因数分解啊

user: user-2
content: 时间超时了， 你看下你的K 多大，你用辗转相除法在对大数求质数时，太耗时了

user: user-0
content: 引用 3 楼 uuuououlcz 的回复:除了fun中的循环代码（条件判别和else语句段）中的问题外，lz思路的还是稍微有点问题的： 尽管除数递增的思路在这种规模的数据下不算坏，但是如果N是一个接近于2^21的素数是不是就差一点了，给lz个思路（当然，肯定还有更好的方法）： (1)因为N <= 2^21，所以必然有N的质因数 < 2^11（如果N有质因数的话） (2)先找出 < 2^11内所有的质数（不用担心，lz可以搜下素数筛选法，上界2048还是相当快的） (3)让N试着除以这些质数来分解N 好的  我再试试
user-0 提问: 求教linux下的c语言运行可执行文件

回复:
user: user-1
content: 楼主是想获取程序的输出结果再对结果进行处理吗？ 如果是这样的话，那不就可以直接变量保存吗，当然输入输出重定向也是可以的

user: user-0
content: 没人回贴？

user: user-0
content: 楼上两位，我刚在Unix高级编程上也看到这两个函数了，真心感谢

user: user-2
content: 用shell, 管道

user: user-3
content: FILE * popen ( const char * command , const char * type ); int pclose ( FILE * stream );  lz应该是需要这个函数

user: user-0
content: 引用 2 楼 q745401990 的回复:楼主是想获取程序的输出结果再对结果进行处理吗？ 如果是这样的话，那不就可以直接变量保存吗，当然输入输出重定向也是可以的 是这个需求，linux下的接口我不熟悉，win的api我知道，诚心求教！
user-0 提问: C++读取BMP灰度图时发生错位

回复:
user: user-1
content: 用ps和画图工具看  是正常的  用bmp打开的函数 这样的软件  打开就是错位的

user: user-1
content: 我也碰到这样的问题

user: user-0
content: 已解决，sizeof(RGBQUAD)换成1024就行，还是没搞懂为什么。。。。
user-0 提问: 这个双引号前面为什么不加斜杠？

回复:
user: user-1
content: 双引号放在双引号中需要，单引号放在单引号中需要。比如： printf("a\"b");打印a"b

user: user-2
content: 坚决消灭领回复

user: user-3
content: 放在""里应该要加

user: user-0
content: 谢谢大家，明白了。
user-0 提问: 找错，无书时能入库，但一借书程序就停止了

回复:
user: user-0
content: 引用 4 楼 KenZhang1031 的回复:引用终于有大神理我啦，文件操作很生疏的，现看现写，很谢谢你！这道题将文件内容读入到二叉排序树，修改二叉排序树后，用BtoF( 即Binary to File)，将文件清空后把改动后的二叉树再写入文件。 罪过，请勿亵渎神！ 如果是想把借出的书从树中删除对应的节点，那你的Del函数是错误的，你自己理清一下思路就知道。这个，我都盯着看两天啦!找不出错啊

user: user-1
content: 引用终于有大神理我啦，文件操作很生疏的，现看现写，很谢谢你！这道题将文件内容读入到二叉排序树，修改二叉排序树后，用BtoF( 即Binary to File)，将文件清空后把改动后的二叉树再写入文件。 罪过，请勿亵渎神！ 如果是想把借出的书从树中删除对应的节点，那你的Del函数是错误的，你自己理清一下思路就知道。

user: user-0
content: 引用 2 楼 KenZhang1031 的回复:三个问题： 1、fgets函数用得不对，会把换行符也读进来，实际上书名是不包含换行符的。 2、feof函数用得不对，指针到达文件结尾后，需再读一次才会判断是结尾，因此：你的下面一段代码： while(!feof(fp))         {             fgets(str,20,fp);//行读取，如遇换行符，结束读取             puts(str);             InsDelBST(T,str);         } 改为： while(fgets(str,20,fp)) 		{ 			//fgets(str,20,fp);//行读取，如遇换行符，结束读取 			if(str[strlen(str) - 1] == '\n') 				str[strlen(str) - 1] = 0; 			puts(str); 			InsDelBST(T,str); 		} 可以解决你查找图书的问题。让你能找到书库里有的书。 3、最后的函数BtoF不知道你想实现什么功能，这个你得好好根据你想实现的功能整整。你用fp=fopen(ch,"w")打开文件写，书库的记录都被你清除了。到底要实现什么？  ，终于有大神理我啦，文件操作很生疏的，现看现写，很谢谢你！这道题将文件内容读入到二叉排序树，修改二叉排序树后，用BtoF( 即Binary to File)，将文件清空后把改动后的二叉树再写入文件。

user: user-1
content: 三个问题： 1、fgets函数用得不对，会把换行符也读进来，实际上书名是不包含换行符的。 2、feof函数用得不对，指针到达文件结尾后，需再读一次才会判断是结尾，因此：你的下面一段代码： while(!feof(fp))         {             fgets(str,20,fp);//行读取，如遇换行符，结束读取             puts(str);             InsDelBST(T,str);         } 改为： while(fgets(str,20,fp)) 		{ 			//fgets(str,20,fp);//行读取，如遇换行符，结束读取 			if(str[strlen(str) - 1] == '\n') 				str[strlen(str) - 1] = 0; 			puts(str); 			InsDelBST(T,str); 		} 可以解决你查找图书的问题。让你能找到书库里有的书。 3、最后的函数BtoF不知道你想实现什么功能，这个你得好好根据你想实现的功能整整。你用fp=fopen(ch,"w")打开文件写，书库的记录都被你清除了。到底要实现什么？

user: user-0
content: 文件如图

user: user-1
content: 引用这个，我都盯着看两天啦!找不出错啊 你要调试代码，光看不行，单步跟踪。
user-0 提问: 新手有关隐式类转换规则问题，求助,谢谢~

回复:
user: user-0
content: 哈哈，谢谢，小弟了解不少

user: user-1
content: 非也非也,楼主只知其一,不知其二. 首先自动类型转换的规则为: 按照从高到低的顺序给各种数据类型分等级，依次为：long double, double, float, unsigned long long, long long, unsigned long, long, unsigned int 和 int。这里有一个小小的例外，如果 long 和 int 大小相同，则 unsigned int 的等级应位于 long 之上。char 和 short 并没有出现于这个等级列表，是因为它们参与运算时就应该已经被升级成了 int 或者 unsigned int。 由此得知: a+b  是要先把 a 当成unsigned int 来看待的. 可知a+b的结果是55536  然后: 在赋值语句中，= 右边的值在赋予 = 左边的变量之前，首先要将右边的值的数据类型转换成左边变量的类型。也就是说，左边变量是什么数据类型，右边的值就要转换成什么数据类型的值。这个过程可能导致右边的值的类型升级，也可能导致其类型降级（demotion）。所谓“降级”，是指等级较高的类型被转换成等级较低的类型。 然后55536转化成int时,就变成-10000了

user: user-2
content: %d又把b cast成signed了。

user: user-3
content: 因为你是%d输出的, 而%d表示的是有符号整数的输出. 无符号数输出应该用%u.  b = a+b; 这句就已经把计算结构强行转换成无符号数了.
user-0 提问: 求教赋值问题

回复:
user: user-0
content: 引用 1 楼 user-1 的回复:打印格式同参数要配套... printf("%s = %s \n",cfg[i].parameter,*(char **)cfg[i].variable);   还真是，谢谢哈  O(∩_∩)O~

user: user-1
content: 打印格式同参数要配套... printf("%s = %s \n",cfg[i].parameter,*(char **)cfg[i].variable);
user-0 提问: 有关结构体的地址？

回复:
user: user-1
content: 让指针指向那个给定的位置。那个位置可能是硬件特定的，所以写死在程序里。

user: user-2
content: 嵌入式呀，不了解这个芯片，但如果这条语句有意义的话，应该可以这样解释： CPU的0x4C000000地址连接了这个时钟电源，外设的参数对应于一个S3C24X0_CLOCK_POWER类型的结构体，我们要设置参数时，需要先获取这个结构体的指针（即lz说的那一条语句），然后即可通过指针->操作来变更结构体的内容

user: user-3
content: 这个跟汇编语言有关系么~~

user: user-4
content: S3C24X0_CLOCK_POWER类型的指针clk_power指向0x4C000000这个地址

user: user-5
content: 给clk_power赋值0x4C000000

user: user-6
content: 相当于 int* p = (int*) 0x4c000000;

user: user-7
content: 将内存地址0x4c000000后的sizeof（S3C24X0_CLOCK_POWER）个字节作为一个S3C24X0_CLOCK_POWER结构体，然后让clk_power指向这个结构体
user-0 提问: 求帮忙解释一段暴力递归的算法……

回复:
user: user-1
content: “给定一个小点的输入，完整单步跟踪(同时按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史)一遍。”是理解递归函数工作原理的不二法门！ 递归函数关注以下几个因素 ·退出条件 ·参数有哪些 ·返回值是什么 ·局部变量有哪些 ·全局变量有哪些 ·何时输出 ·会不会导致堆栈溢出

user: user-2
content: This function finds the optimal of subproblem i (start from i=0 until i=dict.n). If subject i is chosen, subset[i] is set to 1

user: user-0
content: 引用 1 楼 user-3 的回复:全部都要解释吗？？不是……只有bfadvisorhelper那个函数

user: user-3
content: 全部都要解释吗？？
user-0 提问: 多级指针问题求解

回复:
user: user-0
content: 引用 4 楼 A3872215 的回复:int sort(int ** t, int len)    //冒泡升序 { 		int i; 		int j; 		int cont;  		for (i=0; i<len-1; ++i) 				for (j=0; j<len-1-i; ++j) 						if (*(*t+j) > *(*t+j+1))    //这里 有问题  （*t）是地址 （*t）+j  就是地址偏移了，*((*t)+t)就是取地址了。 						{ 								cont = *t[j]; 								*t[j] = *t[j+1]; 								*t[j+1] = cont; 						}  		return 0; } 谢了，问题解决了。

user: user-1
content: 不懂帮顶，祝福楼主问题早日得解！！！

user: user-2
content: int sort(int ** t, int len)    //冒泡升序 { 		int i; 		int j; 		int cont;  		for (i=0; i<len-1; ++i) 				for (j=0; j<len-1-i; ++j) 						if (*(*t+j) > *(*t+j+1))    //这里 有问题  （*t）是地址 （*t）+j  就是地址偏移了，*((*t)+t)就是取地址了。 						{ 								cont = *t[j]; 								*t[j] = *t[j+1]; 								*t[j+1] = cont; 						}  		return 0; }

user: user-0
content: 引用 2 楼 Kenier 的回复:除了那个space函数，其它的没必要用指针的指针吧，是为了对齐好看么？ 嗯，我在熟悉多级指针的运用！

user: user-3
content: 除了那个space函数，其它的没必要用指针的指针吧，是为了对齐好看么？

user: user-0
content: 额，刚调试好了。。。。  	for (i=0; i<len-1; ++i) 		for (j=0; j<len-1-i; ++j) 			if (*(*t+j) > *(*t+j+1)) 			{ 				cont = *(*t+j); 				*(*t+j) = *(*t+j+1); 				*(*t+j+1) = cont; 			}
user-0 提问: 函数的局部变量2

回复:
user: user-1
content: 不会,f0里的tmp只是指向堆内存的指针而已

user: user-2
content: malloc从堆上分到的内存空间地址，只能通过free释放，如果没有调用free的话，你可以一直享有该段内存的合法使用权。楼主你的代码里面少了free的调用。

user: user-3
content: 抱歉，看错了：  1）你这个返回的是局部变量，不是它的地址。根本就没有问题。 2）返回的指针，是动态分配的内存，只要分配是成功的，记住不用的时候释放掉，就没有丝毫问题。 3）返回局部变量本身，和返回它的地址，以及C++返回局部变量的引用，是两回事。    返回局部变量本身，没有任何问题。    注意返回值表达式，绝对可以安全返回所得到的结果。        真正有问题的是返回局部自动变量的地址；    以及C++返回局部自动变量的引用。    因为出了函数以后，不能保证局部自动变量，占用的内存，不会重新分配给别的变量使用。    也不能保证，这块内存还有其他用途。可能就是函数返回地址。  举例：  int *fun(int *y) {     int x =10;     ++x;//x 应该始终是11 才对 	*y +=100;      printf("x=%d,*y=%d\n",x,*y); 	return &x; }  int main() {        int x=20;     int* y =fun(fun(&x));     printf("x=%d,*y=%d\n",x,*y);      return 0; }     //x=11,*y=120   //fun(&x) //x=111,*y=111  //x=111，岂不怪哉， fun(fun(&x)); //x=120,*y=4199068  // y 就是 fun(fun(&x)); 的返回值，局部变量的地址， //*y 应该是 11，111 中的一个才对，不料结果是4199068  int *fun(int *y) {     int x =10;     ++x;//x 应该始终是11 才对 	*y +=100;      printf("x=%d,*y=%d\n",x,*y); 	return &x; }  int main() {        int x=20;     int* y =fun(&x);     printf("x=%d,*y=%d\n",x,*y);      return 0; }  //x=11,*y=120 //x=120,*y=4199068     //*y 依然是 4199068，哈哈！

user: user-3
content: #include <stdio.h> #include <malloc.h>  struct my {int a;};  struct my *f0() {struct my *tmp;  tmp = (struct my *)malloc(sizeof(struct my));  tmp->a = 3;  return tmp; } 函数这样写，看看结果如何 int main() { struct my *tmpp; tmpp = f0(); ｛  int t =100;      printf("%d",tmpp->a);    ｝ return 0; }

user: user-4
content: tmp只是保存这个内存在堆里的地址，它又被当作返回值，那么main里的tmpp就接收到了这个地址，所以printf引用tmpp->a是正常的。另外，一个知道另一个人的位置的人被x掉，跟他知道的这个人有什么关系？

user: user-5
content: 你这段代码不会。虽然内存是在函数f0中申请的，但是申请的内存指针，你赋给了main函数中的tmpp，从f0函数返回后，里面的局部变量tmp是不能用了，但是你赋值给了tmpp，tmpp是可以用的，而且malloc申请的内存在堆里，你没有用free释放，因此还存在，内存可指针都在，因此使用没有问题。 而你所说的另一个同类问题，是局部变量（虽然是结构），你返回了局部变量的指针给main函数中的指针，没错，这个指针还是指向之前那个内存位置，但是函数返回后，局部变量就被释放了，由可能被其它进程使用了，因此你打印出来的值是未知的。 区别就是：malloc申请的内存在堆，局部变量在栈，作用范围不一样。
user-0 提问: makefile语法

回复:
user: user-1
content: 搜“跟我一起写makefile”

user: user-2
content: 这语句就是给xx变量赋个值，然后又打印出来，有什么意义吗？

user: user-3
content: $ cat Makefile  xx=@xx@  default : 	echo ${xx}  $ make echo @xx@ @xx@  由此可见其实并没有什么特殊之处。  真正的意图，还需看调用xx的上下文。

user: user-4
content: http://blog.csdn.net/onejian/article/details/7743035

user: user-5
content: 有“xxxx=@xxxx@”的写法吗？你贴一段上来看看。
user-0 提问: 还是我，删除节点那段好像老出问题啊

回复:
user: user-1
content: 你的树结构没用父指针，用了父指针，因此，需要在树中查找节点，然后删除，你的写法是不行的，要像这样： bool Delete(BiTree p){ 	BiTree q; 	BiTree s;   //该节点为叶子节点，直接删除    if (!p->rchild && !p->lchild)   {       delete p;   }   else if(!p->rchild){  //右子树空则只需重接它的左子树     q=p->lchild; 	memcpy(p->data, p->lchild->data, sizeof(p->data));     p->lchild=p->lchild->lchild;     p->rchild=p->lchild->rchild; 	     free(q);   }   else if(!p->lchild){  //左子树空只需重接它的右子树     q=p->rchild; 	memcpy(p->data, p->rchild->data, sizeof(p->data));     p->lchild=p->rchild->lchild;     p->rchild=p->rchild->rchild;       free(q);  }   else{ //左右子树均不空     q=p;      s=p->lchild;     while(s->rchild){        q=s;        s=s->rchild;     }   //转左，然后向右到尽头 	memcpy(p->data, s->data, sizeof(p->data)); //s指向被删结点的“前驱”     if(q!=p)           q->rchild = s->lchild;    //重接*q的右子树     else        q->lchild = s->lchild;    //重接*q的左子树     free(s);   }   return true; }  bool Del(BiTree &T, BiTree p){     if(!T)      return false;          else{ 	  if(p->data == T->data) {    //  找到树中的节点，删除       return Delete(T);     }     else if(LT(p->data , T->data))       return Del(T->lchild, p);     else       return Del(T->rchild, p);   } }
user-0 提问: c语言链表的创建出了问题

回复:
user: user-1
content: //写入     p1=phead;      p2=phead->pnext;      ch=p2->value;      while(p2!=NULL)      {          fputc(ch,in);          p2=phead->pnext;      }      fclose(in); 你的ch在循环外面，从头到尾没变过。。。
user-0 提问: 从学数据结构半年以来。唯一对这种表示很头疼

回复:
user: user-1
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语言的指针，原本看似复杂的东西就会变得非常简单！ 指针即地址。“地址又是啥？”“只能从汇编语言和计算机组成原理的角度去解释了。” 但我又不得不承认：  有那么些人喜欢或者适合用“先具体再抽象”的方法学习和理解复杂事物；  而另一些人喜欢或者适合用“先抽象再具体”的方法学习和理解复杂事物。 而我本人属前者。  不要企图依赖输出指针相关表达式的值【比如printf("%p\n",...)】来理解指针的本质， 而要依赖调试时的反汇编窗口中的C/C++代码【比如void *p=...】及其对应汇编指令以及内存窗口中的内存地址和内存值来理解指针的本质。  这辈子不看内存地址和内存值；只画链表、指针示意图，画堆栈示意图，画各种示意图，甚至自己没画过而只看过书上的图……能从本质上理解指针、理解函数参数传递吗？本人深表怀疑！ 这辈子不种麦不收麦不将麦粒拿去磨面；只吃馒头、吃面条、吃面包、……甚至从没看过别人怎么蒸馒头，压面条，烤面包，……能从本质上理解面粉、理解面食吗？本人深表怀疑！！  提醒： “学习用汇编语言写程序” 和 “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-2
content: 其实都这么学过来的，指针，内存，地址，这些关系最初理解不够透彻是很正常的，坚持把。

user: user-3
content: 直接在纸上用笔画，结果一目了然。以后一看到这种东西条件反射就会在脑海中出现你自己画的图

user: user-4
content: 引用 3 楼 wangdahu888 的回复:看多了就不晕了，不看反而不舒服！

user: user-5
content: 引用 2 楼 KenZhang1031 的回复:在调试环境单步跟踪一下，每走一步看一下变量改变的情况，这样就明白了。 这是好方法

user: user-6
content: 画一个链表图，自己画一下指针就行了

user: user-7
content: 看多了就不晕了，不看反而不舒服！

user: user-8
content: 在调试环境单步跟踪一下，每走一步看一下变量改变的情况，这样就明白了。

user: user-9
content: 看着肯定会晕，你用笔在纸上画一下就很快可以明白了
user-0 提问: 为什么二级指针不能操作一维数组？

回复:
user: user-1
content: 引用 5 楼 fishion 的回复:#include <stdio.h> void main(void) { int array_test[3] = {1, 2, 3}; int **ptr;  ptr = (int **)&array_test; for(int i =0;i < 3;i++) printf("%d\n",*(ptr + i)); } 这样没有什么含义呀，就为了使用二级指针，而定义一个二级指针？  楼主你可以 写一个int *arry_test[3]; 再来用 二级指针，你的测试是不是更加直接？

user: user-2
content: int a = 1; // 或 int a[2] = {1,2}; int *p = &a; // 或 int **p = (int**)&a;

user: user-3
content: 引用 5 楼 fishion 的回复:#include <stdio.h> void main(void) { int array_test[3] = {1, 2, 3}; int **ptr;  ptr = (int **)&array_test; for(int i =0;i < 3;i++) printf("%d\n",*(ptr + i)); }

user: user-0
content: 引用 5 楼 fishion 的回复:#include <stdio.h> void main(void) { int array_test[3] = {1, 2, 3}; int **ptr;  ptr = (int **)&array_test; for(int i =0;i < 3;i++) printf("%d\n",*(ptr + i)); } 谢谢~

user: user-0
content: 引用 4 楼 bijiaoben 的回复:我想问是运行出错还是编译出错啊。。。 编译出错

user: user-4
content: #include <stdio.h> void main(void) { int array_test[3] = {1, 2, 3}; int **ptr;  ptr = (int **)&array_test; for(int i =0;i < 3;i++) printf("%d\n",*(ptr + i)); }

user: user-5
content: 我想问是运行出错还是编译出错啊。。。

user: user-0
content: 引用 1 楼 u010420013 的回复:#include<stdio.h> int main() { 	int array_test[3]={1,2,3}; 	int **ptr; 	int *pt; 	ptr=&pt; 	pt=array_test;//之前本句之所以出错，是因为ptr是指针的指针，给它赋的值应该是指针的地址，                      而你没有给它赋值就使用了它。 	              //其实报错信息说的已经很明显了，使用了未赋值的ptr，楼主请仔细考虑一下~ 	printf("%lu\n",ptr);  	return 0; }  你好，我之前的发帖的意思并不是说二维指针通过一维指针间接地操作一维数组，而是为什么二级指针不能直接操作一维数组，如您所说，我将程序改为： 	#include <stdio.h> 	void main(void) 	{ 		int array_test[3] = {1, 2, 3}; 		int **ptr;                  ptr = &array_test; 		for(int i =0;i < 3;i++) 			printf("%d\n",*(*ptr + i)); 	} 此时 程序依旧是错误的，我想知道为什么不可以这样做，谢谢回复~

user: user-6
content: 学习了，原来是二级指针未赋值

user: user-3
content: #include<stdio.h> int main() { 	int array_test[3]={1,2,3}; 	int **ptr; 	int *pt; 	ptr=&pt; 	pt=array_test;//之前本句之所以出错，是因为ptr是指针的指针，给它赋的值应该是指针的地址，                      而你没有给它赋值就使用了它。 	              //其实报错信息说的已经很明显了，使用了未赋值的ptr，楼主请仔细考虑一下~ 	printf("%lu\n",ptr);  	return 0; }
user-0 提问: 链表的实现

回复:
user: user-1
content: 引用 2 楼 IT_dreamer1993 的回复:在这用二维指针是什么意思？ void init(linkli *head);  linkli *head; init(head); init函数中操作的只是指针head的一个副本，函数返回后会被撤销 注意：虽然传递的是指针变量，但是仍然会产生副本

user: user-0
content: 在这用二维指针是什么意思？

user: user-2
content: 要改为：  void init(linkli **head) {     *head=(struct linklist*)malloc(sizeof(struct linklist));     *head->next=NULL; }
user-0 提问: 如何生成EXE文件

回复:
user: user-0
content: 引用 4 楼 turingo 的回复:是的，数据库引擎即可。  [quote=引用 3 楼 lilin_colin 的回复:] [quote=引用 2 楼 turingo 的回复:] 用installshield打包。  [quote=引用 楼主 lilin_colin 的回复:] 小弟我使用VS2012+SQLserver2008 制作了一个软件  如何打包生成EXE文件  去到其他 没有安装VS 和 sqlserver数据库的电脑也能运行呢?[/quote] 百度也有介绍这个方法，看起来比较繁琐。  是不是 对方不需要安装数据库就能使用呢？[/quote][/quote] 谢了~

user: user-1
content: 是的，数据库引擎即可。  引用 3 楼 lilin_colin 的回复:[quote=引用 2 楼 turingo 的回复:] 用installshield打包。  [quote=引用 楼主 lilin_colin 的回复:] 小弟我使用VS2012+SQLserver2008 制作了一个软件  如何打包生成EXE文件  去到其他 没有安装VS 和 sqlserver数据库的电脑也能运行呢?[/quote] 百度也有介绍这个方法，看起来比较繁琐。  是不是 对方不需要安装数据库就能使用呢？[/quote]

user: user-0
content: 引用 2 楼 turingo 的回复:用installshield打包。  [quote=引用 楼主 lilin_colin 的回复:] 小弟我使用VS2012+SQLserver2008 制作了一个软件  如何打包生成EXE文件  去到其他 没有安装VS 和 sqlserver数据库的电脑也能运行呢?[/quote] 百度也有介绍这个方法，看起来比较繁琐。  是不是 对方不需要安装数据库就能使用呢？

user: user-1
content: 用installshield打包。  引用 楼主 lilin_colin 的回复:小弟我使用VS2012+SQLserver2008 制作了一个软件  如何打包生成EXE文件  去到其他 没有安装VS 和 sqlserver数据库的电脑也能运行呢?

user: user-0
user-0 提问: win32程序编译通过,但是不能运行

回复:
user: user-0
content: 引用 1 楼 user-1 的回复:你建的是控制台程序，要用Win32 Application才行，否则链接器默认会去找main()函数做为程序入口。 链接器有个选项： /subsystem:console 控制台程序，入口函数为main()； /subsystem:windows Win32应用程序，入口函数为WinMain()；恩,确实是这样啊,我改过来了,可是你是怎么知道我建造的是控制台程序的,从那里看出来的啊

user: user-1
content: 你建的是控制台程序，要用Win32 Application才行，否则链接器默认会去找main()函数做为程序入口。 链接器有个选项： /subsystem:console 控制台程序，入口函数为main()； /subsystem:windows Win32应用程序，入口函数为WinMain()；