Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 判断是否是同一棵二叉搜索树。多组数据该怎么修改代码

回复:
user: user-0
content: return SameBST( OrangeBST->Right , BST->Right  ) ;这句错了

user: user-1
content: 为何没有销毁树的代码  每组中，每个序列，只需要和第一个比较就好了，因为生成的二叉树必须是全同的 因此，只需要初始序列，和比较序列两个序列，就够用了 具体做法是 读取N,L 生成初始序列  first, 接着循环生成 比较序列 next 如果相同，销毁 next 重建序列 否则，输出结论"No"  这样就处理好一组数据了 此时销毁 这两个二叉树。 输出结论。“Yes” 另外也可以用数组表示二叉树这样就不需要销毁了 注意N<=10 每个序列，可以用最多十个节点表示。

user: user-0
content: 引用 4 楼 user-1 的回复:return SameBST( OrangeBST->Right , BST->Right ) ; 这句错了 这个判断实际上是不对的，没有找到确切位置， 确切位置是 if( BST->Data != OrangeBST->Data )//根节点数据不同          return 0 ;  因为 if(BST==NULL&&OrangeBST==NULL)//两边都为空         return 1 ;     if( BST->Data != OrangeBST->Data )//根节点数据不同         return 0 ; 这个判断，不能保证，在二者有一个为空的时候，不出错。 后面那种判断， if( (BST->Left==NULL&&OrangeBST->Left!=NULL) || (BST->Left!=NULL&&OrangeBST->Left==NULL) )//一边左子树为空另一棵左子树非空         return 0 ;     if( BST->Left!=NULL && OrangeBST->Left!=NULL && BST->Left->Data!=OrangeBST->Left->Data)//两边左子树非空但元素不同         return 0 ;     if(  BST->Left!=NULL&&OrangeBST->Left!=NULL && BST->Left->Data == OrangeBST->Left->Data)//两边左子树都非空并且元素相同,判断右子树         return SameBST( OrangeBST->Right , BST->Right  ) ; 1是太复杂而没有必要， 2是很难找出错误，条件太多了，  代码应该力求简洁 这样才比较容易判断哪里出错。  对于比较复杂的表达式，最好分开几行写。 当然，更好的是，代码里不出现这种复杂的表达式。  C,C++ 语言，并不要求 所有 代码写在一行上， 所以一行最好只写功能单一的代码 条件表达式太复杂，应该分行写。 任何表达式过于复杂，都应该分行写，以便调试的时候，比较容易定位错误。 恩恩，记住了。你的方法使代码简洁不少呢

user: user-1
content: return SameBST( OrangeBST->Right , BST->Right ) ; 这句错了 这个判断实际上是不对的，没有找到确切位置， 确切位置是 if( BST->Data != OrangeBST->Data )//根节点数据不同          return 0 ;  因为 if(BST==NULL&&OrangeBST==NULL)//两边都为空         return 1 ;     if( BST->Data != OrangeBST->Data )//根节点数据不同         return 0 ; 这个判断，不能保证，在二者有一个为空的时候，不出错。 后面那种判断， if( (BST->Left==NULL&&OrangeBST->Left!=NULL) || (BST->Left!=NULL&&OrangeBST->Left==NULL) )//一边左子树为空另一棵左子树非空         return 0 ;     if( BST->Left!=NULL && OrangeBST->Left!=NULL && BST->Left->Data!=OrangeBST->Left->Data)//两边左子树非空但元素不同         return 0 ;     if(  BST->Left!=NULL&&OrangeBST->Left!=NULL && BST->Left->Data == OrangeBST->Left->Data)//两边左子树都非空并且元素相同,判断右子树         return SameBST( OrangeBST->Right , BST->Right  ) ; 1是太复杂而没有必要， 2是很难找出错误，条件太多了，  代码应该力求简洁 这样才比较容易判断哪里出错。  对于比较复杂的表达式，最好分开几行写。 当然，更好的是，代码里不出现这种复杂的表达式。  C,C++ 语言，并不要求 所有 代码写在一行上， 所以一行最好只写功能单一的代码 条件表达式太复杂，应该分行写。 任何表达式过于复杂，都应该分行写，以便调试的时候，比较容易定位错误。

user: user-1
content: int SameBST( BinTree OrangeBST , BinTree BST ) {     ///根节点相等判断 1 同为空节点，返回 1     if(BST==NULL  && OrangeBST==NULL)//两边都为空                 return 1 ;     if(BST==NULL)return 0; ///只有一个空节点，比较序列为空，返回 0     if  (OrangeBST==NULL)return 0; 只有一个空节点，原始序列为空，返回 0          if( BST->Data != OrangeBST->Data )//根节点数据不同          return 0 ;      return SameBST( OrangeBST->Left , BST->Left  )              && SameBST( OrangeBST->Right , BST->Right  ); }  这样就可以了，左右子树不必另外处理，各用一个递归调用足矣。
user-0 提问: 链表运行过程中出异常！指教

回复:
user: user-1
content: 观察如下结构体： struct stu{  int num; double cort; struct stu * next; }; 使用malloc分配内存内存不会进行初始化，所有next会是随机值，这也是为什么while循环异常退出的原因

user: user-2
content: # include<stdio.h> # include<malloc.h> #include <stdlib.h> struct stu{  int num; double cort; struct stu * next; }; struct stu *s1(); int Output(struct stu * head); //输出链表  struct stu *s2(struct stu *head); int main() { struct stu *t; 	int i = 0; 	 	t=s1();//创建新链表  	 	 	s2(t);//删除链表某个结点   	return 0; }  struct stu *s1() { 	struct stu * head; 	head = (struct stu *)malloc(sizeof(struct stu)); 	struct stu *s1; 	struct stu *s2; 	s2=s2=head; 	do 	{ 		 		if(head==NULL) 		{ 			exit(1); 		} 		else 		{ 			printf("创建学生成绩管理系统\n"); 			s1 = (struct stu *)malloc(sizeof(struct stu)); 			printf("输入学生学号:"); 			scanf("%d",&s1->num); 			printf("输入学生成绩:"); 			scanf("%lf",&s1->cort); 			printf("\n"); 			s2->next=s1; 			s2=s1;	 		} 	}while(s1->num); 	 	s2->next = NULL; 	pOutput(head);//输出链表  	return head; } int pOutput(struct stu * head){ struct stu *p; p=head; while(p->next!=NULL) {  printf("%d\n%lf\n",p->next->num,p->next->cort); p = p->next; } 	return 0; } struct stu *s2(struct stu *head) { 	 	struct stu *s1; 	struct stu *s2; 	struct stu *headl; 	struct stu *te; 	struct stu *tse; 	int n = 0; 	headl=head; 	if(headl==NULL) 	{ 		printf("链表为空\n"); 	} 	printf("输入要删除的学号:"); 	scanf("%d",&n); 	s2 = headl; 	if(headl->next->num==n) 	{ 		if(headl->next->next==NULL) 			return 0; 		else 		{ 			tse=headl->next; 			headl->next=tse->next; 		} 		free(tse); 	} 	else 	{ 	s1=s2->next; 	while(s1->next!=NULL & s1->next->num!=n) 	{ 		s1=s1->next; 	} 	te=s1->next; 	s1->next=s1->next->next; 	free(te); 	} 	pOutput(headl); 	return headl; }

user: user-2
content: 在哪里的基础是改了一下下

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

user: user-4
content: 好像都没返回值， 代码太长而且没有缩进，手机看好麻烦

user: user-0
content: 引用 1 楼 user-5的回复:别说运行，编译都有问题，你s1和s2函数需要返回一个int值啊 我编译可以过。。。。。

user: user-5
content: 别说运行，编译都有问题，你s1和s2函数需要返回一个int值啊
user-0 提问: 新手求教，如何实现在程序运行的任意时刻按q键退出

回复:
user: user-1
content: 本来控制台程序在输入时按Ctrl+C或Ctrl+Break就可以退出的。 楼主的程序即使实现了按q随时退出，万一哪天输入内容中有q咋办？比如需要输入qq12345678

user: user-2
content: 只能另外开个线程来实现了

user: user-3
content: while(scanf("%d",&var)!=1)//就是利用scanf的返回值判断是否输入非整形 {          quit(); }//手机客户端可能排版不好看，轻喷！  不知道是不是这么个意思

user: user-4
content: 引用 2 楼 qq_33031101 的回复:是控制台程序，怎样在执行scanf是也能实现按q键退出  如果想要任意时刻都会的话可以用多线程来实现，用一个线程捕捉键盘消息   	INPUT_RECORD irInBuf; 	DWORD cNumRead; 	ReadConsoleInput(GetStdHandle(STD_INPUT_HANDLE),&irInBuf,1,&cNumRead);  	if(irInBuf.EventType == KEY_EVENT && irInBuf.Event.KeyEvent.bKeyDown)//键盘事件 		if(irInBuf.Event.KeyEvent.wVirtualKeyCode == xxx && GetConsoleWindow()==GetForegroundWindow())                  //然后处理

user: user-0
content: 是控制台程序，怎样在执行scanf是也能实现按q键退出

user: user-4
content: 什么类型程序，如果是控制台的话你只能不断监视，GUI程序可以注册热键或者根据消息响应来实现
user-0 提问: C语言float数组的问题

回复:
user: user-1
content: 2.2这种常量本身就是double类型，float类型需要在后面加f，写成2.2f

user: user-0
content: 引用 5 楼 paschen 的回复:这是语法规定，浮点字面值可以用十进制或科学计数法（指数用E或e）表示，默认为double，在数值后加F或f表示单精度，加L或l表示扩展精度  了解了，谢谢

user: user-2
content: 不是因为超范围。而只是单纯的因为你用 double 来初始化 float 。  在每个常量后面加一个 f 吧。 4.6f 2.6f 5.2f ...

user: user-1
content: 引用 3 楼 user-3 的回复:[quote=引用 2 楼 paschen 的回复:] 2.2这种常量本身就是double类型，float类型需要在后面加f，写成2.2f 2.2为啥是double型而不是float？有点糊涂了。。。。。。[/quote]  这是语法规定，浮点字面值可以用十进制或科学计数法（指数用E或e）表示，默认为double，在数值后加F或f表示单精度，加L或l表示扩展精度

user: user-2
content: 引用 3 楼 user-3 的回复:[quote=引用 2 楼 paschen 的回复:] 2.2这种常量本身就是double类型，float类型需要在后面加f，写成2.2f 2.2为啥是double型而不是float？有点糊涂了。。。。。。[/quote]  http://en.cppreference.com/w/c/language/floating_constant

user: user-3
content: 引用 2 楼 paschen 的回复:2.2这种常量本身就是double类型，float类型需要在后面加f，写成2.2f 2.2为啥是double型而不是float？有点糊涂了。。。。。。
user-0 提问: acm大一新手初尝试..两道题目如下,大神快到碗里来orz

回复:
user: user-1
content: 不是很了解ACM的规则-_- 第一个用位运算，或者遍历字符串试试 第二个可以做字符串循环判断吧，可能写的麻烦点
user-0 提问: 新手求解一道题

回复:
user: user-1
content: bool isDividedBy3(int x) {         return x%3 == 0?true:false; }  用三目吧，简洁又高效

user: user-2
content: 引用 10 楼 xiexiaohuahua 的回复:[quote=引用 7 楼 zhangxiangDavaid 的回复:]  int x(int s) {     if(s%3==0)         printf("能被3整除");     else         printf("不能被3整除"); }  为什么要是int x(int s),不能直接int s呢？[/quote] 前者是函数，后者是变量

user: user-3
content: 引用 7 楼 zhangxiangDavaid 的回复: int x(int s) {     if(s%3==0)         printf("能被3整除");     else         printf("不能被3整除"); }  为什么要是int x(int s),不能直接int s呢？

user: user-0
content: 引用 8 楼 zhangxiangDavaid 的回复:void x(int s); 谢了

user: user-2
content: 引用 5 楼 L799826351 的回复:[quote=引用 4 楼 zhangxiangDavaid 的回复:]  int x(int s) { if(s%3==0) s=1; else s=0; return s;  那如果我想把最后输出的该为 中文 怎么改，能被3整除，不能被3整除 我希望能输出这个[/quote]  int x(int s) {     if(s%3==0)         s=1;     else         s=0;     return s;

user: user-2
content: void x(int s);

user: user-2
content: int x(int s) {     if(s%3==0)         printf("能被3整除");     else         printf("不能被3整除"); }

user: user-0
content: 引用 4 楼 zhangxiangDavaid 的回复: int x(int s) { if(s%3==0) s=1; else s=0; return s;  那如果我想把最后输出的该为 中文 怎么改，能被3整除，不能被3整除 我希望能输出这个

user: user-2
content: int x(int s) { if(s%3==0) s=1; else s=0; return s;

user: user-0
content: #include<iostream> using namespace std; int x(int); int main() { 	int a; 	cout<<"请输入一个数："; 	cin>>a; 	cout<<""<<a<<"="<<x(a)<<endl; 	return 0; } int x(int) { 	int s; 	if(s%3==0) 		s=1; 	else 		s=0; 	return s; } 你那个我看不懂，我是大一刚学C++的，这是我写的 这个输出结果都是=0，我想把下面的S=1换成能被3整除，S=0换成不能被3整除，不知道怎么换，求教 ，希望你明白我的意思。

user: user-4
content: #include <iostream>  using namespace std;  bool isDividedBy3(int x) {         if(x%3 == 0)                 return true;         return false; }  int main() {         int a;         while(cin>>a) {                 if( isDividedBy3(a) )                         cout << a << " is divided by 3." << endl;                 else                         cout << a << " is not divided by 3." << endl;         } }

user: user-0
content: 用C++做，谢谢各位大大
user-0 提问: Visual studio 2015 异常中断问题

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

user: user-2
content: scanf_s 这里的问题  如果你希望用户输入 日月年的中间是用 \\ 分隔，那么你需要写成"%d\\\\%d\\\\%d" 否则输入时需要输入成这样：  01\01\2015

user: user-0
user-0 提问: vs2010输入源代码不提示参数

回复:
user: user-1
content: 会有啊，另外如果觉得本身的功能不够强大，可以安装个VA插件

user: user-1
content: 引用 4 楼 csdnxinshou2 的回复:[quote=引用 3 楼 user-1 的回复:] [quote=引用 2 楼 csdnxinshou2 的回复:] [quote=引用 1 楼 user-1 的回复:] 会有啊，另外如果觉得本身的功能不够强大，可以安装个VA插件 我输入 #include <Windows.h> VS提示的。 后面函数就没提示什么情况?[/quote]  printf是可变参数的函数，所以可能有点不同，你在其他函数时，输入括号或逗号，会提示下一个参数（用粗体显示）[/quote] 其他也没有提示。什么情况?[/quote]  那不知道了，那你安装visual assist x插件吧，这个插件功能很强大，可以高效率的写代码

user: user-0
content: 引用 3 楼 user-1 的回复:[quote=引用 2 楼 csdnxinshou2 的回复:] [quote=引用 1 楼 user-1 的回复:] 会有啊，另外如果觉得本身的功能不够强大，可以安装个VA插件 我输入 #include <Windows.h> VS提示的。 后面函数就没提示什么情况?[/quote]  printf是可变参数的函数，所以可能有点不同，你在其他函数时，输入括号或逗号，会提示下一个参数（用粗体显示）[/quote] 其他也没有提示。什么情况?

user: user-1
content: 引用 2 楼 csdnxinshou2 的回复:[quote=引用 1 楼 user-1 的回复:] 会有啊，另外如果觉得本身的功能不够强大，可以安装个VA插件 我输入 #include <Windows.h> VS提示的。 后面函数就没提示什么情况?[/quote]  printf是可变参数的函数，所以可能有点不同，你在其他函数时，输入括号或逗号，会提示下一个参数（用粗体显示）

user: user-0
content: 引用 1 楼 user-1 的回复:会有啊，另外如果觉得本身的功能不够强大，可以安装个VA插件 我输入 #include <Windows.h> VS提示的。 后面函数就没提示什么情况?
user-0 提问: 鞍点代码问题

回复:
user: user-1
content: a[i][j]<=a[t][j]

user: user-2
content: if(a[i][j]>=a[i][t])   //同行最大 { f++; } if(a[i][j]<=a[j][t]) //同列最小??     //改为if(a[i][j]<=a[t][j]) { f++; }
user-0 提问: 这断代码貌似凡是涉及到判断链表非空的时候，就不会执行，请各位帮忙看看

回复:
user: user-0
content: 引用 3 楼 zxhuser-1 的回复:建议下参考一下输入输出和链表的创建 https://github.com/user-1/Senior-middle-school/blob/master/Filling%20in%20the%20gaps.c 谢谢 问题已经解决了

user: user-1
content: 建议下参考一下输入输出和链表的创建 https://github.com/user-1/Senior-middle-school/blob/master/Filling%20in%20the%20gaps.c

user: user-0
content: 引用 1 楼 zxhuser-1 的回复:别说执行了，编译都出错 我用VC编译的没有问题的，运行就有问题了

user: user-1
content: 别说执行了，编译都出错
user-0 提问: 求助！！初学者,使用malloc出现的问题，帮我看看这个是什么原因，怎么修改？谢谢啊

回复:
user: user-1
content: 你在Ini_c中分配的内存是分配到了该函数内的局部变量fia_0指针中，而不是全局变量的那个fia_0  应该要写成：fia_0 = (double ***)malloc((XCell+1)*sizeof(double**)); 吧，前面去年double***
user-0 提问: 这是一段通过队列进行建立二叉树的代码，但是create函数运行结束后程序中断。

回复:
user: user-1
content: 在Create中 Queue *Q; InitQueue(Q);这样无法初始化, 要么为Q分配地址, 要么定义成变量,传地址进去

user: user-2
content: 检查指针是否有效

user: user-0

user: user-0
content: 将初始化函数initate（）中的分配空间malloc删除 就可以了。 现在又出现新问题，定义在create函数前必须有个printf，如果定义的指针型，必须在分配空间后 create函数前加一个printf.....不然不能正常运行。

user: user-0
content: 提示无法写入
user-0 提问: 关于实现链表的操作

回复:
user: user-0
content: ptail与phead都指向同一个节点，懂了

user: user-1
content: ptail->next=NULL; 改成 ptail->pnext=NULL;  代码是对ptail进行的操作 为什么此处返回的是phead而不是ptail；  返回pHead就可以顺着得到后面的链啦
user-0 提问: 学习日记六：同构二叉树

回复:
user: user-1
content: Isomorphic函数里面的逻辑有点乱，很多后面的判断都是没有必要的判断，改成这样，应该也可以的，会相对简洁一些     if( (Root1== Null) && (Root2== Null)  )          return 1 ;      else if( (Root1== Null) || (Root2 == Null) )         return 0 ;      else if( Tree1[Root1].Element != Tree2[Root2].Element  )         return 0 ;      else   if ( Isomorphic(Tree1[Root1].Left,Tree2[Root2].Left) &&  		Isomorphic( Tree1[Root1].Right,Tree2[Root2].Right ) )  		return 1;     else         if ( Isomorphic( Tree1[Root1].Left,Tree2[Root2].Right ) && 			Isomorphic( Tree1[Root1].Right,Tree2[Root2].Left ) )  			return 1; 	return 0;

user: user-0
content: p00000000
user-0 提问: 一个写入文件的有意思现象

回复:
user: user-1
content: 在文件大小相同的前提下：  读刚读过的文件比头次读没读过的文件快  读转速快的硬盘上的文件比读转速慢的硬盘上的文件快  读没有磁盘碎片的文件比读有磁盘碎片的文件快  读文件不处理比边读边处理快  单线程从头到尾一次读文件比多线程分别读文件各部分快（非固态硬盘上）  读固态硬盘上的文件比读普通硬盘上的文件快  写文件类似。

user: user-2
content: 机械硬盘中有一个非常重要的概念：寻道时间 而且寻道时间比读写时间大一两个数量级 小文件读写，时间都花费在寻道上了，当然忙啊

user: user-3
content: 我很奇怪，你这程序居然不会堆栈溢出。那个p数组是在栈上面的，如果真的是512M，你的栈得多大啊

user: user-4
content: fwrite 所使用的时间，与它写了多少东西关系不太大。

user: user-5
content: 楼主解决了@ 下我，我也想知道

user: user-6
content: 这个得看内核的实现了吧。楼主可在多个系统上尝试？
user-0 提问: 帮帮忙 新手很困惑

回复:
user: user-1
content: #include <stdio.h> #define M 3 #define N 5 void pr(double array[M][N]); double MAX(double array[M][N]); double average(double array[M][N]); int main(void) { 	printf("please 请输入三个数集每个数集包括5个double值"); 	int i,j;double array[M][N]; 	for(i=0;i<M;i++) 	{ 		printf("请输入第%d个数集",i+1); 		for(j=0;j<N;j++) 			array[i][j]=getchar(); 	} 	pr(array); 	printf("%f",average(array)); 	printf("%f",MAX(array)); 	return 0; } double average(double array[M][N])   { 	double sum;double average; 	int i,j; 	for(i=0,sum=0;i<M;i++) 		for(j=0;j<N;j++) 			sum=sum+array[i][j]; 	average=sum/N; 	return average; }  double MAX(double array[M][N]) { 	double MAX=0.; 	int i,j; 	for(i=0;i<M;i++) 		for(j=0;j<N;j++) 			if(MAX<array[i][j]) MAX=array[i][j]; 	return MAX; } void pr(double array[M][N]) { 	int i,j; 	for(i=0;i<M;i++) 		for(j=0;j<N;j++) 			printf("%f\n",array[i][j]); }

user: user-2
content: 看上去原型错了 void pr(double array[M][N]); double MAX(double array[M][N]); double average(double array[M][N]);

user: user-3
content: 我觉得是主函数中你定义的三个函数传递的实参有错误，你实际上传递的是指针，而你定义的是double类型
user-0 提问: 求解释一下为什么停止工作

回复:
user: user-1
content: 语言基础：如何使用scanf;

user: user-2
content: scanf中要求给出变量地址，如给出变量名则会出错  for(j=0;j<N;j++){  scanf("%lf",&array[i][j]);}

user: user-3
content: 对函数参数传递理解不深入，如果你只是把该变量的值传递进去，函数内修改的只是这个值的一个副本 scanf需要的是将数据输入到指定的变量，所以传递进去的必须是变量的地址

user: user-4
content: printf里面的%和变量的一一对应关系 scanf里面的%和变量以及变量前加不加&的一一对应关系 是C代码中非常容易出错的地方，而且通常编译还不出错。 所以在编译源代码之前值得专门仔细检查一遍甚至多遍。
user-0 提问: 如何串连两个数组

回复:
user: user-1
content: int a[5],b[5]; int *c[10]={a,a+1,a+2,a+3,a+4,b,b+1,b+2,b+3,b+4}; for(int i=0;i<10;i++)       printf("%d",*c[i]); 可以这么做不过，太麻烦了，通常是不值得。

user: user-2
content: 建议用7楼的   思维

user: user-2
content: #include <stdio.h> int arr1[]={1,2,3,4,5}; int arr2[]={6,7,8,9,10}; int main() {     int i,*a;  	a=arr1; for(i=0;i<sizeof(arr2)/4;i++) { 	a[5+i]=arr2[i]; } for (i=0;i<10;i++)   	printf("AA%d ",*a++);     return 0; }

user: user-3
content: 仅适用于Debug版： #include <stdio.h> int arr1[]={1,2,3,4,5}; int arr2[]={6,7,8,9,10}; int main() {     int larr2[]={16,17,18,19,20};     int larr1[]={11,12,13,14,15};      int i,*a;      a=arr1;     for (i=0;i<10;i++) printf("%d ",a[i]);     printf("\n");      a=larr1;     for (i=0;i<10;i++) printf("%d ",a[i]);     printf("\n");      return 0; } //1 2 3 4 5 6 7 8 9 10 //11 12 13 14 15 16 17 18 19 20 //

user: user-0
content: 我想把某两个数组合并后，赋给一个指针，用这个指针可以检索到两个数组的值，有没有此类方法谢谢

user: user-0
content: 引用 1 楼 paschen 的回复:如果你要连在一起，你定义数组时就要多分配一些空间，int  arr1[]={1,2,3,4,5}; 其实你的arr数组只能存5个元素，你没空间放合并后的，你需要定义时写成int  arr1[100]={1,2,3,4,5}; 这种  你意思是合并后相当于放在ARR1里面？ 我这代码空间有限，不能定义太多空间，因为我想动态合并，在实际运行中，有可能是ARR1和ARR2合并，有可能是ARR1和ARR3和合并。

user: user-4
content: 如果你要连在一起，你定义数组时就要多分配一些空间，int  arr1[]={1,2,3,4,5}; 其实你的arr数组只能存5个元素，你没空间放合并后的，你需要定义时写成int  arr1[100]={1,2,3,4,5}; 这种

user: user-5
content: int length = strlen(arr1)  + strlen(arr2); char *a = (char *)malloc(sizeof(char)*length); memset(a, 0,  length);  strcat(a,arr1); strcat(a,arr2);  不重新申请空间的话你原来没有足够的成片的空间可以放置两个数组，你的函数相当于在arr1之后直接放arr2的内容，那片内存你不一定能用

user: user-6
content: 使用sprintf函数.

user: user-4
content: 引用 2 楼 ding_suki 的回复:[quote=引用 1 楼 paschen 的回复:] 如果你要连在一起，你定义数组时就要多分配一些空间，int  arr1[]={1,2,3,4,5}; 其实你的arr数组只能存5个元素，你没空间放合并后的，你需要定义时写成int  arr1[100]={1,2,3,4,5}; 这种  你意思是合并后相当于放在ARR1里面？ 我这代码空间有限，不能定义太多空间，因为我想动态合并，在实际运行中，有可能是ARR1和ARR2合并，有可能是ARR1和ARR3和合并。[/quote]  你想用一个指针就可以用一个指针访问，你就得把合并后都放到一个数组里，不然你是指什么意思
user-0 提问: c语言二叉树后序遍历非递归算法问题

回复:
user: user-0
content: 引用 1 楼 anzi5091104 的回复:第120行isemptystack在为空时返回1还是0 代码是这样的：  跟这个地方应该没关系，主要是设置某个节点的isPrintOut为true之后，再获取的isPrintOut还是false

user: user-1
content: 第120行isemptystack在为空时返回1还是0

user: user-2
content: //感觉逻辑应该是这样的 else { 	p = GetTop(stack); 	if(IsChildsAllPrintOut(p)) 	{ 		printf("%c",p->val); 		p->isPrintOut = true; 		Pop(statck);	 		p = NULL; 	} 	else p = p->right; }

user: user-0
content: 栈定义得有问题，算法也写得不对
user-0 提问: 新人求教啊！这个不知道要怎么写

回复:
user: user-1
content: 直接枚举好了, 编程也简单 bool solve(int n){     for(int i=0;i<5;i++){         if(n<6|| n%5!=1) return false;         n =(n-1)/5*4;     }     return true; }  int main() {     int i;     for(i=6;!solve(i);i+=5);     cout<<i<<endl;     return 0; }

user: user-2
content: 假设每个人的一堆为xi个 最后一人的数量数总数量 5*x5+1 最后一人，自己得到 x5，猴子得到1 ，还剩 4x5,总数是 x5+1  x至少为一个，所以计算的起点为 x5=1 第四个人 剩余 的数量时 x4 = (5 x5 + 1)/4 递推公式是 x【i】 = (5 *x【i+1】+1)/4; total【i] = (5 *x【i】+1) 可以从最后一个人向前推,下标也就反过来了  这样就变成 x[i]=  (5* x【i-1】+1)/4; total【i] = (5 *x【i】+1) 注意，每个步骤中 x[i] 为整数。不能除尽的x[i]  的方案，就可以排除了，直到找到第一个可行方案，就是最小的数量了

user: user-2
content: 听说用倒推法
user-0 提问: c语言作业求助

回复:
user: user-1
content: #include<stdio.h>  void main() { 	int m,n,i,j; 	char que[30]; 	scanf("%s",&que); 	printf("please input m and n:\n"); 	scanf("%d%d",&m,&n);  	if(m>sizeof(que)&&n>sizeof(que)) 		printf("NULL!\n");  	else if(m<sizeof(que)&&n>sizeof(que)) 	{ 		for(i=m-1;i<sizeof(que);i++) 		{ 			printf("%c",que[i]); 		} 	} 	else if(m==n)  		printf("%c",que[m]);  	else if(m<sizeof(que)&&n<sizeof(que)) 	{ 		for(j=m-1;j<n;j++) 		{ 			printf("%c",que[j]); 		} 	}  }

user: user-2
content: #include<stdio.h> #include<stdlib.h> #include<string.h>  #define N 100  void print(char chr[N],int m,int n);  void main() { 	char chr[N]; 	int m,n; 	gets(chr); 	printf("please input first number:"); 	scanf("%d",&m); 	printf("please input second number:"); 	scanf("%d",&n); 	print(chr,m,n);  	system("pause"); }  void print(char chr[N],int m,int n) { 	int i=0; 	int length=strlen(chr); 	char *p=chr; 	if(p==NULL||(m>=length && n>=length)) 		return; 	else 	{ 		if(m<=length && n>=length) 			printf("%s",p+m-1); 		if(m==n) 			printf("%c",*(p+m-1)); 		if(m<length && n<length) 			for(i=m-1;i<n;i++) 				printf("%4c",*(p+i)); 	} }
user-0 提问: 试着写个简单计算器，结果是悲催的。。。

回复:
user: user-1
content: #include <stdio.h> int main() {     char s[40];     int a,b;      scanf("%39s",s);          if(2==sscanf(s,"%d*%d",&a,&b)) printf("%d\n",a*b);     else if(2==sscanf(s,"%d-%d",&a,&b)) printf("%d\n",a-b);     else if(2==sscanf(s,"%d+%d",&a,&b)) printf("%d\n",a+b);     else if(2==sscanf(s,"%d/%d",&a,&b)) printf("%d\n",a/b);     else                                printf("error\n");     return 0; }

user: user-0
content: 引用 2楼paschen 的回复:这样不行，因为他每次判断都要重新读入，所以只有第一个if行    #include<stdio.h> int main() { 	int a,b; 	char ch; 	scanf("%d%c%d",&a,&ch,&b); 	if(ch == '*') 		printf("%d\n",a*b); 	else if(ch == '-') 		printf("%d\n",a-b); 	else if(ch == '+') 		printf("%d\n",a+b); 	else if(ch == '/') 		printf("%d\n",a/b); 	else 		printf("error"); 	return 0; } 这样，懂了，谢啦

user: user-0
content: 引用 1楼user-3 的回复:不行, 得读进来自己判断 %d%c%d嗯嗯，知道了，谢啦

user: user-2
content: 这样不行，因为他每次判断都要重新读入，所以只有第一个if行    #include<stdio.h> int main() { 	int a,b; 	char ch; 	scanf("%d%c%d",&a,&ch,&b); 	if(ch == '*') 		printf("%d\n",a*b); 	else if(ch == '-') 		printf("%d\n",a-b); 	else if(ch == '+') 		printf("%d\n",a+b); 	else if(ch == '/') 		printf("%d\n",a/b); 	else 		printf("error"); 	return 0; }

user: user-3
content: 不行, 得读进来自己判断 %d%c%d
user-0 提问: C语言问题

回复:
user: user-1
content: 指针数组没必要吧； while里的判断表达式和一般的赋值混了

user: user-2
content: 先去把书多看几遍吧。数组定义都没搞明白。

user: user-3
content: gets()函数接收的是char *类型，楼主确定实现字符串的连接需要定义指针数组*a[N]么？ 还有，printf("%s",strcat);楼主这是要打印连接后的字符串吗？这个只是函数的入口地址，不是 字符串a的存储地址

user: user-4
content: 头文件，申明。要加#include <string.h>

user: user-5
content: strcat(a, b); printf("%s", strcat); 建议你还是把基础先看好
user-0 提问: 关于scanf_s

回复:
user: user-1
content: if (fopen_s(&fp, name, "wb") == 1) 改成 if (fopen_s(&fp, name, "wb") != 0)   fopen_s的返回值：Zero if successful; an error code on failure.   具体看：https://msdn.microsoft.com/library/z5hh6ee9(v=vs.110).aspx

user: user-2
content: 换scanf试试，是不是编译器对安全模式支持的问问题。再在中间加空格试试。

user: user-0
content: 引用 1 楼 paschen 的回复:我调试没出错啊，你是编译出错还是运行出错，错误信息是什么运行出错，在第一次输入score[i].neme这一行回车时，出现上面图片中的情况

user: user-0
content: 引用 1 楼 paschen 的回复:我调试没出错啊，你是编译出错还是运行出错，错误信息是什么

user: user-1
content: 我调试没出错啊，你是编译出错还是运行出错，错误信息是什么
user-0 提问: C语言的存储类

回复:
user: user-1
content: 引用 2 楼 ID870177103 的回复:存储类可分为auto、register、static、extern、mutable、thread_local等。 你说的是这个吗 auto自动变量，生存周期为当前语句、语句块，默认类型 register希望使用寄存器来储存，适用于操作频繁的数据 static静态，生存周期为整个程序周期（主线程） extern变量不是在这里定义，这里只是一个引用，显然它是对应static的 mutable即使结构变量是const的，它的mutable成员也可以被修改 thread_local静态，但是每个线程有它自己的副本，生存周期是关联线程的周期

user: user-2
content: 动态储存：auto 自动的，register 寄存器                  特点：默认初始未定 静态储存：extern 外部的  static 静态的                   特点：默认初始为0 局部变量：auto  register static 全局变量：extern static extern:外文件能调用该变量的值 static:           1.局部static:该函数结束后，变量的值被保存。函数再次被调用时，变量的值是函数结束时保存的值。           2.全局static：外文件不能通过全局变量extern来调用static的变量值

user: user-3
content: 我正好看书看到这里，c primer plus 第十一章讲的就是这个。 大学c基础课没有这种东西，我打算好好看看

user: user-3
content: 引用 3 楼 qq_31361473的回复:我正好看书看到这里，c primer plus 第十一章讲的就是这个。 大学c基础课没有这种东西，我打算好好看看   是十二章

user: user-4
content: 存储类可分为auto、register、static、extern、mutable、thread_local等。 你说的是这个吗 auto自动变量，生存周期为当前语句、语句块，默认类型 register希望使用寄存器来储存，适用于操作频繁的数据 static静态，生存周期为整个程序周期（主线程） extern变量不是在这里定义，这里只是一个引用，显然它是对应static的 mutable即使结构变量是const的，它的mutable成员也可以被修改 thread_local静态，但是每个线程有它自己的副本，生存周期是关联线程的周期

user: user-5
content: 什么叫存储类  你是指变量的存储类型吗？
user-0 提问: 输入一串用空格隔开的数字串,对于数字串的奇数位按升序排序,偶数位按降序排序.

回复:
user: user-1
content: 用Java的话试试这个。。 import java.util.*;  public class Main { 	public static void main(String args[]) { 		Scanner scan = new Scanner(System.in); 		String inStr = scan.nextLine(); 		scan.close(); 		String[] strs = inStr.split(" "); 		int N = strs.length; 		int[] inNums = new int[N]; 		for (int i = 0; i < N; i++) { 			inNums[i] = Integer.parseInt(strs[i]); 			// System.out.println(strs[i]); 		}  		int tmp = 0; 		//奇数位升序 		for (int i = 0; i < N - 1; i = i + 2) { 			for (int j = i; j < N - 1; j = j + 2) { 				if (inNums[i] > inNums[j]) { 					tmp = inNums[i]; 					inNums[i] = inNums[j]; 					inNums[j] = tmp; 				} 			} 		} 		//偶数位降序 		for (int i = 1; i < N - 1; i = i + 2) { 			for (int j = i; j < N - 1; j = j + 2) { 				if (inNums[i] < inNums[j]) { 					tmp = inNums[i]; 					inNums[i] = inNums[j]; 					inNums[j] = tmp; 				} 			} 		} 		  		for (int i = 0; i < N; i++) { 			System.out.print(inNums[i]); 			System.out.print(" "); 		}  	}  }

user: user-2
content: 你可以查一下ShellSort
user-0 提问: 用C语言编写一个购物车的系统

回复:
user: user-1
content: 这个能改成C++的格式吗？

user: user-2
content: https://www.baidu.com/s?wd=C语言%20购物车

user: user-3
content: 不明觉厉

user: user-4
content: 感谢,但是没有注释很多地方看不太懂
user-0 提问: 关于函数调用数组的问题

回复:
user: user-0
content: thank you1！！

user: user-1
content: 修改后的代码:   #include<stdio.h>     int fun(float s[],int n,float below[])     {         int num=0,i,j;         float sum=0,ev;         for(i=0;i<n;i++)             sum=sum+s[i];         ev=sum/n;         for(j=0;j<n;j++)             if(s[j]<ev)             {             below[num]=s[j];                num++;             }                     return num;     }     int main()     {         float s[20];         float below[20]={0};         int n,i,k;         printf("请输入要输入的数的个数：\n");         scanf("%d",&n);         printf("请输%d个数\n",n);         for (i=0;i<n;i++)             scanf("%f",&s[i]);         k=fun(s,n,below);         printf("低于平均分的个数是%d\n",k);             for(i=0;i<k;i++)             printf("%f ",below[i]);         return 0;     }  你的主要问题是:int s[20]; scanf("%f",&s[i]);
user-0 提问: 输入字符串问题

回复:
user: user-1
content: #include <stdio.h>  int main() {    char buf[80];    scanf("%30s", buf);     return 0; }

user: user-2
content: 注意buf前面不能加&

user: user-3
content: scanf("%30s", &buf);

user: user-4
content: 使用scanf_s，其最后一个参数是缓冲区的大小，表示最多读取n-1个字符

user: user-5
content: %30s，改成这个试试
user-0 提问: 关于C语言文件读写  删除一行的问题 

回复:
user: user-1
content: 所谓修改删除文件a某位置的内容，其实是读打开文件a，再将‘a中修改删除位置之前的内容＋修改删除的内容＋a中修改删除位置之后的内容’保存到文件b，关闭文件a，删除文件a，将文件b改名为与之前文件a相同的名字，仅此而已。

user: user-2
content: 如果是在linux下c的话可以看看sed命令 使用system调用

user: user-0
content: 读出来 原来的 Colour = 35 也不会消失  你再写进去 也是一样

user: user-3
content: 把这行数值部分先全部删掉，然后再写，这样行不行啊

user: user-4
content: 你先把这行内容Colour = 35 读出来 然后用8替换 而不是直接在3位置写8这样肯定是85
user-0 提问: 如何读取文件

回复:
user: user-1
content: FILE *f; unsigned char a[100],v,i=0; f=fopen(...,"r"); while (1) {  if (1!=fscanf(f,"%i",&v)) break;  a[i]=(unsigned char)v;  i++;  if (i>=100) break; } fclose(f);

user: user-2
content: 每次读一行为字符串 然后字符串转为整形 最后放入数组中

user: user-3
content: 要读成字符串还是数字 用文本方式打开文件读
user-0 提问: 承接昨天的帖子继续询问

回复:
user: user-1
content: #include <stdio.h> #include <stdlib.h> #define LEN    64 #define M 3 #define N 3 char *get_message(char *message2, int message1[M][N]); int main(void) {     int message1[M][N] = { { 1,1,1 },{ 0,0,0 },{ 0,0,0 } };     char *message2 = "help";     message2 = get_message(message2, message1);     printf("%s", message2);     return 0; } char *get_message(char *message2, int message1[M][N]) {     int i, j;     static char message[LEN];     char *p=message;     p+=sprintf(p, "%s", message2);     for (i = 0;i < M;i++)         for (j = 0;j < N;j++)         {             p+=sprintf(p,"%d",message1[i][j]);         }     return message; } //help111000000

user: user-2
content: 返回char的话return message;这句会错误 返回char*的话return 1;这句会错误

user: user-3
content: 不要询问为什么错误的程序可以得到期望的结果。  错误的程序可能得到任何结果。

user: user-4
content: char *p=message; p+=sprintf(p,"%s",message2); for (i = 0;i < M;i++)         for (j = 0;j < N;j++)         {             p +=sprintf(p, "%d",message1[i][j]);         }

user: user-2
content: 引用 3 楼 zyzy577048814 的回复:[quote=引用 2 楼 paschen 的回复:] 返回char的话return message;这句会错误 返回char*的话return 1;这句会错误 那无解了？[/quote]  不明白你函数要做什么，如果返回类型必须一致，如果想返回多个变量，可以通过函数参数实现返回

user: user-0
content: 引用 2 楼 paschen 的回复:返回char的话return message;这句会错误 返回char*的话return 1;这句会错误 那无解了？
user-0 提问: 求分析代码。

回复:
user: user-1
content: 代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。

user: user-2
content: #include<stdio.h> int main(void) {          char a=0,ch;//定义了a和ch         while((ch=getchar())!='\n'){//获取键盘值，直到回车结束           if(a%2!=0&&(ch>='a'&&ch<='z'))//判断条件（a的值为奇数并且ch在a到z之间（指的都是ASCM值））          ch=ch-'a'+'A';//ch的值加上（‘A’-'a'）....具体多少忘了。。           a++;//a自加1,也就是向后退一位，计算下一个           putchar(ch);//输出ch值。          }         printf('\n');         return 0;  }

user: user-3
content: 引用 8 楼 qq_31361473的回复:因为0%2是0啊，第一个当然不会进入循环。 另外，'A'-'a'不应该就是26吗，←_←，其实就是转换大小写吧   是判断不是循环，手机客户端的锅

user: user-3
content: 因为0%2是0啊，第一个当然不会进入循环。 另外，'A'-'a'不应该就是26吗，←_←，其实就是转换大小写吧

user: user-4
content: 引用 2 楼 tamaaaa 的回复:[quote=引用 1 楼 paschen 的回复:] printf("\n");  双引号  确实，这个应该是印刷错了，能帮忙分析一下代码吗，为什么输入labce12df会输出lAbCeD12dF[/quote]  如果满足if，即字符是在字符串中的第奇数个，且为小写字母，则将该字母转换成大写，否则不转换。最后输出

user: user-5
content: if(a%2!=0&&(ch>='a'&&ch<='z'))ch=ch-'a'+'A';当a为奇数且ch是小写字母时，把ch换成对应大写字母，不满足if条件，直接输出ch

user: user-0
content: 引用 1 楼 paschen 的回复:printf("\n");  双引号  确实，这个应该是印刷错了，能帮忙分析一下代码吗，为什么输入labce12df会输出lAbCeD12dF

user: user-4
content: printf("\n");  双引号

user: user-0
content: 引用 4 楼 paschen 的回复:[quote=引用 2 楼 tamaaaa 的回复:] [quote=引用 1 楼 paschen 的回复:] printf("\n");  双引号  确实，这个应该是印刷错了，能帮忙分析一下代码吗，为什么输入labce12df会输出lAbCeD12dF[/quote]  如果满足if，即字符是在字符串中的第奇数个，且为小写字母，则将该字母转换成大写，否则不转换。最后输出[/quote]那请问起初a的值为0时不也满足条件吗？为什么输入的第一个字符l不转化成大写L

user: user-0
content: 引用 5 楼 zyzy577048814 的回复:#include<stdio.h> int main(void) {          char a=0,ch;//定义了a和ch         while((ch=getchar())!='\n'){//获取键盘值，直到回车结束           if(a%2!=0&&(ch>='a'&&ch<='z'))//判断条件（a的值为奇数并且ch在a到z之间（指的都是ASCM值））          ch=ch-'a'+'A';//ch的值加上（‘A’-'a'）....具体多少忘了。。           a++;//a自加1,也就是向后退一位，计算下一个           putchar(ch);//输出ch值。          }         printf('\n');         return 0;  }谢谢，但起初a的值为0时不也满足条件吗？为什么输入的第一个字符l不转化成大写L
user-0 提问: 求人帮忙看看代码问题出在哪里？栈的应用——进制转换

回复:
user: user-1
content: 引用 2 楼 baidu_32899011 的回复:S.base=(int*)malloc(100*sizeof(int));//为什么这里的100不能用STACK_INIT_SIZE代替？ #define后面不需要分号，除非你确定需要

user: user-0
content: S.base=(int*)malloc(100*sizeof(int));//为什么这里的100不能用STACK_INIT_SIZE代替？

user: user-2
content: scanf("%d",N);  改成  scanf("%d",&N);
user-0 提问: 新手小白   对编程完全不懂    请问这是怎么回事

回复:
user: user-1
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-2
content: printf()后面出现中文分号…

user: user-0
content: 引用 10 楼 paschen的回复:[quote=引用 8 楼 qq_32947505 的回复:] [quote=引用 6 楼 maydaysar的回复:][quote=引用 5 楼 qq_32947505的回复:][quote=引用 2 楼 maydaysar的回复:][quote=引用 1 楼 maydaysar的回复:]这个有错吗？应该没错吧？ 括号，是大括号…………[/quote] 我也该过括号了  还是不行[/quote] 我刚才试了下，可以啊，就一个括号，具体为啥你不能我就不太清楚了[/quote] 你说你刚才用我的这个  把括号该后就好了？[/quote]  小括号也要全改成英文下的啊[/quote] 恩 好   我在试一下

user: user-0
content: 引用 7 楼 paschen的回复: #include <stdio.h> #include <stdlib.h>  int main( void ) { 	printf( "Hello world!\n");  system( "pause" ); return 0; }   函数中的内容是放在大括号里，另外你其中一些括号是中文状态下的，编程中用的都是英文下的，这个要注意 现在这样就行了吗？   小白什么都不懂    正在学习中

user: user-0
content: 引用 6 楼 maydaysar的回复:[quote=引用 5 楼 qq_32947505的回复:][quote=引用 2 楼 maydaysar的回复:][quote=引用 1 楼 maydaysar的回复:]这个有错吗？应该没错吧？ 括号，是大括号…………[/quote] 我也该过括号了  还是不行[/quote] 我刚才试了下，可以啊，就一个括号，具体为啥你不能我就不太清楚了[/quote] 你说你刚才用我的这个  把括号该后就好了？

user: user-3
content: 引用 8 楼 qq_32947505 的回复:[quote=引用 6 楼 maydaysar的回复:][quote=引用 5 楼 qq_32947505的回复:][quote=引用 2 楼 maydaysar的回复:][quote=引用 1 楼 maydaysar的回复:]这个有错吗？应该没错吧？ 括号，是大括号…………[/quote] 我也该过括号了  还是不行[/quote] 我刚才试了下，可以啊，就一个括号，具体为啥你不能我就不太清楚了[/quote] 你说你刚才用我的这个  把括号该后就好了？[/quote]  小括号也要全改成英文下的啊

user: user-3
content: #include <stdio.h> #include <stdlib.h>  int main( void ) { 	printf( "Hello world!\n");  system( "pause" ); return 0; }   函数中的内容是放在大括号里，另外你其中一些括号是中文状态下的，编程中用的都是英文下的，这个要注意

user: user-4
content: 引用 5 楼 qq_32947505的回复:[quote=引用 2 楼 maydaysar的回复:][quote=引用 1 楼 maydaysar的回复:]这个有错吗？应该没错吧？ 括号，是大括号…………[/quote] 我也该过括号了  还是不行[/quote] 我刚才试了下，可以啊，就一个括号，具体为啥你不能我就不太清楚了

user: user-0
content: 引用 2 楼 maydaysar的回复:[quote=引用 1 楼 maydaysar的回复:]这个有错吗？应该没错吧？ 括号，是大括号…………[/quote] 我也该过括号了  还是不行

user: user-4
content: 引用 3 楼 qq_32947505的回复:[quote=引用 1 楼 maydaysar的回复:]这个有错吗？应该没错吧？ 总是生成失败   我还是头都晕了   琢磨一天了[/quote] 我也比较白，正在学习中……

user: user-0
content: 引用 1 楼 maydaysar的回复:这个有错吗？应该没错吧？ 总是生成失败   我还是头都晕了   琢磨一天了

user: user-4
content: 引用 1 楼 maydaysar的回复:这个有错吗？应该没错吧？ 括号，是大括号…………

user: user-4
content: 这个有错吗？应该没错吧？
user-0 提问: 关于“局部变量存储周期”的一个小问题

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

user: user-2
content: 佩服楼上大牛！ c primer plus  指针那块有讲说局部变量是独立的，生存周期就不太懂了-_-||

user: user-3
content: 局部变量是栈变量, 第一次可以用是因为在fun之后, 这个值没有其它函数用,在调用printf之后, 这地址就被用到了, 它的值就不确定

user: user-4
content: int *p; int *q; int a = 21;   void fun() {     int b = 23; //这个是局部变量 栈内存 生命周期在两个括号之间，     p = &b;   //在括号内p的值是正确，除了括号就不知道了，就看这块栈内存有没有被再次利用覆盖     q = &a; //这个是全局变量， 静态区，生命周期直到程序关闭，所以一直是正确的 } //总之 不能用指针这样指向局部对象，后果未知，如果内存被复用，你用p操作此块内存，后果未知   int main(int argc, const char * argv[]) {       fun();     printf("%d\n", *p);      //p指向栈内存，此时fun函数已经结束，      printf("%d\n", *q);     printf("%d\n", *q);       printf("%d\n", *p);     printf("%d\n", *p);     return 0; } 对于(*p)来说，只要写在fun()函数后，就可以调用正确，反之，不行？ 对于你这句话，我的回答就是只要出了fun函数，所有的调用都是不正确的，有可能会导致未知结果  是不是系统对于局部变量的处理机制就是这样规定的讷？为什么用malloc()函数分配出来的空间会一直存在，而局部变量不是讷？ 局部变量：栈内存的变量 出了作用域也就是括号，变量被释放相应的内存也会被程序释放，具体内存中的数据有没有改变就，就看此内存有没有被复用 malloc()函数分配出来的空间，是堆内存，堆内存C++是不会主动去释放的，需要你人工去free释放，否则一直存在，就会造成所谓的内存泄露 我就说这么多了 推荐书籍 C++primer

user: user-5
content: 对于p，其所指的地址你没有改当然没变了，只是他指向一个局部变量，其在函数结束时生命周期已结束 你说第一次调用还可以显示其值，那是因为那时该内存上的数据还没有被覆盖（调用函数是先把参数压栈），而你第一次使用printf之后，其值将会被prinft覆盖，所以不要在返回局部变量的指针

user: user-5
content: malloc是动态分配，程序员负责分配，也由程序员负责释放，而局部变量是在栈上分配的，不需要程序员自己释放，函数结束时会自动被回收
user-0 提问: C语言问题

回复:
user: user-1
content: #include<stdio.h> #include<stdlib.h>  int main() { 	int N,n; 	int i=0; 	int a[] ={11,15,18,20,29,31,43,50,}; 	int b[sizeof(a)/sizeof(a[0])+1] = {0}; 	 	printf("请输入插入的数字：\n"); 	scanf("%d", &N); 	 	for ( i=0; i<sizeof(a)/sizeof(a[0]); i++) 	{ 		if ( N >= a[i] ) 		{ 			b[i] = a[i]; 			n ++; 		} 		b[n] =N; 		if ( N < a[i] )  		{ 			b[i+1] = a[i]; 		} 	} 	 	for ( i=0; i<sizeof(a)/sizeof(a[0]); i++) 	{ 		printf("a[%d]=%d ",i,a[i]); 	 	} 	printf("\n"); 	for ( i=0; i<sizeof(a)/sizeof(a[0])+1; i++) 	{ 		printf("b[%d]=%d ",i,b[i]);	 	} 	 	return 0; }  你写的有问题，int　类型和　char　类型 混淆了（或者你有别的想法）。这是我写的  试了一下没有发现问题，你试试，有问题和我说一声

user: user-2
content: 同意3楼，strlen放到初始化后再用吧

user: user-3
content: 在strlen处使用sizeof不是更好吗

user: user-4
content: strlen(char*）函数求的是字符串的实际长度，它求得方法是从开始到遇到第一个'\0'，如果你只定义没有给它赋初值，这个结果是不定的，它会从aa首地址一直找下去，直到遇到'\0'停止。 strlen 是求字符串的实际长度  应为 char a[N]

user: user-4
content: 给你说了初始化，你不初始化，长度是不对的，你试试就知道

user: user-0
content: 还是不对，有大神帮我求解吗

user: user-5
content: 引用 1 楼 user-5 的回复:int a[N]; 改成 char a[N];  因为根据你的代码判断你的a应该是要存储字符串  你看下这样呢：   # include <stdio.h> # include <string.h> # define N 100 int main() { 	char a[N]; 	int b[N+1]; 	int n; 	int len; 	int i = 0; 	printf("请输入一串有序数"); 	gets(a); 	len = strlen(a); 	printf("请输入一个数"); 	scanf_s("%d", &n); 	for (i = 0; i < len ; i++) 	{ 		if (n > a[i]) 			b[i] = a[i]; 		else 		{ 			b[i] = n; 			b[i + 1] = a[i]; 		} 	} 	for (i = 0; i < len + 1; i++) 	{ 		printf("%d", b[i]); 	} 	return 0; }

user: user-0
content: Len=strlen(a)不是代表数组a的长度吗，为何还要初始化

user: user-4
content: Len=strlen(a)你的a没有初始化，你把a初始化就可以了

user: user-0
content: 为什么要改成char型，我照着你的改了，但是还是不对

user: user-5
content: int a[N]; 改成 char a[N];
user-0 提问: 【C新手求助】编译错误，不知道哪里错了，老提示缺失分号。源码已粘贴！

回复:
user: user-1
content: 在vs下，双击错误，可以定位到出错行

user: user-0
content: 引用 1 楼 user-2 的回复:调用函数时不需要加void  void avg(s); 改成  avg(s); void sort(avg1); 改成 sort(avg1);   #include "stdio.h"        main() { 	void avg(float s[4][3]); 	float s[4][3]; 	int i,j; 	for(i=0;i<4;i++) 	{ 		for(j=0;j<3;j++) 		{ 			printf("请输入第%d个学生的第%d门课程的成绩：",i+1,j+1); 			scanf("%f",&s[i][j]); 		} 		printf("\n"); 	} 	avg(s); } void avg(float s[4][3]) { 	void sort(float avg1[4]); 	float avgs,avgc,sum,avg1[4],avg2[3]; 	int i,j; 	for(i=0;i<4;i++) 	{ 		sum=0; 		for(j=0;j<3;j++) 		{ 			sum+=s[i][j]; 		} 		avgs=sum/4; 		avg1[i]=avgs; 	} 	for(i=0;i<4;i++) 	{ 		printf("第%d个学生的平均成绩是：%.2f",i+1,avg1[i]); 	} 	for(i=0;i<3;i++) 	{ 		sum=0; 		for(j=0;j<4;j++) 		{ 			sum+=s[j][i]; 		} 		avgc=sum/3; 		avg2[i]=avgc; 	} 	for(i=0;i<3;i++) 	{ 		printf("第%d门课程的平均成绩是：%.2f",i+1,avg2[i]); 	} 	sort(avg1); } void sort(float avg1[4]) { 	int i; 	float t; 	for(i=0;i<4;i++) 	{ 		if(avg1[i]>avg1[i+1]) 		{ 			t=avg1[i]; 			avg1[i]=avg1[i+1]; 			avg1[i+1]=t; 		} 	} 	printf("学生平均成绩排序："); 	for(i=0;i<4;i++) 	{ 		printf("%.2f",avg1[i]); 	} }  OK  谢了  看老一阵子没看出来  原来是这个不是问题的问题哈哈

user: user-2
content: 调用函数时不需要加void  void avg(s); 改成  avg(s); void sort(avg1); 改成 sort(avg1);   #include "stdio.h"        main() { 	void avg(float s[4][3]); 	float s[4][3]; 	int i,j; 	for(i=0;i<4;i++) 	{ 		for(j=0;j<3;j++) 		{ 			printf("请输入第%d个学生的第%d门课程的成绩：",i+1,j+1); 			scanf("%f",&s[i][j]); 		} 		printf("\n"); 	} 	avg(s); } void avg(float s[4][3]) { 	void sort(float avg1[4]); 	float avgs,avgc,sum,avg1[4],avg2[3]; 	int i,j; 	for(i=0;i<4;i++) 	{ 		sum=0; 		for(j=0;j<3;j++) 		{ 			sum+=s[i][j]; 		} 		avgs=sum/4; 		avg1[i]=avgs; 	} 	for(i=0;i<4;i++) 	{ 		printf("第%d个学生的平均成绩是：%.2f",i+1,avg1[i]); 	} 	for(i=0;i<3;i++) 	{ 		sum=0; 		for(j=0;j<4;j++) 		{ 			sum+=s[j][i]; 		} 		avgc=sum/3; 		avg2[i]=avgc; 	} 	for(i=0;i<3;i++) 	{ 		printf("第%d门课程的平均成绩是：%.2f",i+1,avg2[i]); 	} 	sort(avg1); } void sort(float avg1[4]) { 	int i; 	float t; 	for(i=0;i<4;i++) 	{ 		if(avg1[i]>avg1[i+1]) 		{ 			t=avg1[i]; 			avg1[i]=avg1[i+1]; 			avg1[i+1]=t; 		} 	} 	printf("学生平均成绩排序："); 	for(i=0;i<4;i++) 	{ 		printf("%.2f",avg1[i]); 	} }
user-0 提问: 关于CONST和define的区别

回复:
user: user-0
content: 引用 15 楼 paschen 的回复:你这书上的不清楚，在优化的情况况下，如果没有对const常量取地址等操作，一般也会把其作立即数处理  在没优化下，你定义N个const变量，也会有N个内存空间  这什么书，我觉得写得很烂   好吧~

user: user-1
content: 你这书上的不清楚，在优化的情况况下，如果没有对const常量取地址等操作，一般也会把其作立即数处理  在没优化下，你定义N个const变量，也会有N个内存空间  这什么书，我觉得写得很烂

user: user-0
content: 引用 11 楼 paschen 的回复:[quote=引用 10 楼 sinat_26551021 的回复:] [quote=引用 2 楼 paschen 的回复:] 问题3： #define是一个真常量，编译时会将其全部进行替换，而const却是由编译器判断实现的常量，是一个假常量。 使用const定义的变量，最终还是一个变量，只是在编译器内进行了检查，发现有修改则报错，所以如果想修改其值也是有办法的，可以强制去掉const修饰   这个怎么理解呢 [/quote]  哪里不理解呢[/quote]    我不清楚为什么const只分配一次内存，#define却是多次。  不是都定义了两个变量吗？ 两个变量不应该都分配内存吗

user: user-2
content: 向前排的大牛致敬，学习了！ 预编译是编译器的事；变量名和指针不一样；小弟愚见：const更多在于帮你对一些不能修改值的变量把关，编译的时候如果你不小心改动了本该const的值就好报错——至于编译原理，小弟也是不懂

user: user-3
content: 宏替换完全是在源文件上的文本操作。  ===========  只要程序的对外表现与标准规定是一致的，程序可以使用任何自己认为合适的方式实现一段代码，包括是否为一个常量/变量分配内存。  实际上，编译器连变量都可以不分配空间，何况常量。

user: user-1
content: 引用 10 楼 sinat_26551021 的回复:[quote=引用 2 楼 paschen 的回复:] 问题3： #define是一个真常量，编译时会将其全部进行替换，而const却是由编译器判断实现的常量，是一个假常量。 使用const定义的变量，最终还是一个变量，只是在编译器内进行了检查，发现有修改则报错，所以如果想修改其值也是有办法的，可以强制去掉const修饰   这个怎么理解呢 [/quote]  哪里不理解呢

user: user-0
content: 引用 2 楼 paschen 的回复:问题3： #define是一个真常量，编译时会将其全部进行替换，而const却是由编译器判断实现的常量，是一个假常量。 使用const定义的变量，最终还是一个变量，只是在编译器内进行了检查，发现有修改则报错，所以如果想修改其值也是有办法的，可以强制去掉const修饰   这个怎么理解呢

user: user-4
content: 引用 6 楼 paschen 的回复:另外你不可能对#define定义的常量取地址，const则是可以的，因为他是一个假常量   define 和内存是没有什么关系的！！楼主你不要纠结这个，你可以理解为define 是一种工具而已

user: user-4
content: 你看我才1级，这可能是我有生之年CSDN第一分，20分20分 快到碗里来

user: user-1
content: 另外你不可能对#define定义的常量取地址，const则是可以的，因为他是一个假常量

user: user-4
content: 楼主你是不是骗人的，不是说有20分吧，我还没得过分呢，给我分给我分，都别和我抢啊

user: user-5
content: i,j是普通变量，i=M；是值M拷贝到i的存储空间里；同理I,J也是；

user: user-4
content: 引用 1 楼 paschen 的回复:问题1，i、j不是指针，不需要指向任何内存地址，两个变量各自有各自的地址，其地址中的值均为5 问题2，是的   栈内存。也是内存吧。i j也是有内存地址的

user: user-1
content: 问题3： #define是一个真常量，编译时会将其全部进行替换，而const却是由编译器判断实现的常量，是一个假常量。 使用const定义的变量，最终还是一个变量，只是在编译器内进行了检查，发现有修改则报错，所以如果想修改其值也是有办法的，可以强制去掉const修饰

user: user-4
content: 1.在上面的程序中，i,j是指向同一个const定义的内存空间吗？ 不是，不同的栈内存 2.在上面的程序中，I=N、J=N中的5是在内存中开辟了两个值都5的空间吗？ 然后分别命名为I和J？ 是 3const和define在内存使用上有什么区别？ define  和内存怎么分配没关系。是预编译宏，可以理解为在代码中遇到N替换给5  建议，把这几个变量的地址 printf出来就很明显了

user: user-1
content: 问题1，i、j不是指针，不需要指向任何内存地址，两个变量各自有各自的地址，其地址中的值均为5 问题2，是的
user-0 提问: 这字符型数据输入是怎么一回事啊，输入出错了？？

回复:
user: user-1
content: 在每个最后不带\n的printf后面加fflush(stdout); 在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin); 另外请检查scanf的返回值。 //请今后要用 int c; scanf("%c",&c); //时，都改为 char s[2]; int c; scanf("%1s",s); c=s[0];

user: user-2
content: 引用 3 楼 u010107248 的回复:[quote=引用 2 楼 zhangxiangDavaid 的回复:]  scanf("%d\n",&N ) ; //直接 scanf("%d",&N ) ;   scanf("%c %c %c\n" , &Tree[i].Element , &cl , &cr ) ; //改为 rewind(stdin); scanf("%c %c %c" , &Tree[i].Element , &cl , &cr ) ;  结果对了，正在看scanf语句中\n，空格的作用。。。亲最好能对我说下 [/quote]  接收最后的换行符

user: user-0
content: 引用 1 楼 paschen 的回复:改成这样呢：   			scanf("%c %c %c" , &Tree[i].Element , &cl , &cr ) ; 			getchar();  引用 1 楼 paschen 的回复:改成这样呢：   			scanf("%c %c %c" , &Tree[i].Element , &cl , &cr ) ; 			getchar();  我还是弱逼啊

user: user-0
content: 引用 2 楼 zhangxiangDavaid 的回复: scanf("%d\n",&N ) ; //直接 scanf("%d",&N ) ;   scanf("%c %c %c\n" , &Tree[i].Element , &cl , &cr ) ; //改为 rewind(stdin); scanf("%c %c %c" , &Tree[i].Element , &cl , &cr ) ;  结果对了，正在看scanf语句中\n，空格的作用。。。亲最好能对我说下

user: user-3
content: scanf("%d\n",&N ) ; //直接 scanf("%d",&N ) ;   scanf("%c %c %c\n" , &Tree[i].Element , &cl , &cr ) ; //改为 rewind(stdin); scanf("%c %c %c" , &Tree[i].Element , &cl , &cr ) ;

user: user-2
content: 改成这样呢：   			scanf("%c %c %c" , &Tree[i].Element , &cl , &cr ) ; 			getchar();
user-0 提问: 怎么根据带条件跳转的C语言生成的汇编代码写出对应的C程序

回复:
user: user-1
content: 引用 10 楼 qq_31361473 的回复:学习c的终极形态就是学汇编吗 对学习编程者的忠告： 多用小脑和手，少用大脑、眼睛和嘴，会更快地学会编程！ 眼过千遍不如手过一遍！ 书看千行不如手敲一行！ 手敲千行不如单步一行！ 单步源代码千行不如单步Debug版对应汇编一行！ 单步Debug版对应汇编千行不如单步Release版对应汇编一行！

user: user-0
content: 引用 1 楼 user-3 的回复:看《C++反汇编与逆向分析技术揭秘》 if 部分的讲解  另外什么叫返回值的默认值  就是返回值的初始化的值？主要就是这个没法确定，因为GCC编译的时候会进行某些优化，导致汇编代码的顺序和C语言代码顺序不一致！

user: user-2
content: 学习c的终极形态就是学汇编吗

user: user-3
content: 看《C++反汇编与逆向分析技术揭秘》 if 部分的讲解  另外什么叫返回值的默认值

user: user-0
content: 引用 8 楼 user-3 的回复:[quote=引用 7 楼 td901105td 的回复:] [quote=引用 6 楼 zhao4zhong1 的回复:] https://msdn.microsoft.com/zh-cn/magazine/7572ztz4.aspx   C代码形式是： int test(int x,int y) {     int  val = _____;     if()     .......      return val; }  对应的汇编代码如下：    请问val的初始值应该计算？ [/quote]  int val = 1;  产生的反汇编： mov   dword ptr [val],1 [/quote]  标准的答案是

user: user-3
content: 引用 7 楼 td901105td 的回复:[quote=引用 6 楼 zhao4zhong1 的回复:] https://msdn.microsoft.com/zh-cn/magazine/7572ztz4.aspx   C代码形式是： int test(int x,int y) {     int  val = _____;     if()     .......      return val; }  对应的汇编代码如下：    请问val的初始值应该计算？ [/quote]  int val = 1;  产生的反汇编： mov   dword ptr [val],1

user: user-0
content: 引用 6 楼 zhao4zhong1 的回复:https://msdn.microsoft.com/zh-cn/magazine/7572ztz4.aspx   C代码形式是： int test(int x,int y) {     int  val = _____;     if()     .......      return val; }  对应的汇编代码如下：    请问val的初始值应该计算？

user: user-1
content: https://msdn.microsoft.com/zh-cn/magazine/7572ztz4.aspx

user: user-1
content: 16位下是AX 32位下是EAX 64位下是RAX  https://msdn.microsoft.com/zh-cn/magazine/9b372w95.aspx

user: user-0
content: 引用 3 楼 zhao4zhong1 的回复:0 ？？？？？？？？？？？？？？？？？？？？

user: user-1
content: 0
user-0 提问: help help 苦逼的计科妹子遇到了一个大难题。

回复:
user: user-1
content: 同二楼，你的gys的while里的else多余吧

user: user-2
content: 代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。

user: user-3
content: 妹子 我按照你的思路 改了下，你看看

user: user-3
content: #include <stdio.h> int gys(int ,int ); int gbs(int ,int ,int );  int _tmain(int argc, _TCHAR* argv[]) { 	int m,n,l,s; 	printf("请输入两个整数"); 	scanf("%d,%d",&m,&n); 	l = gys(m,n); 	s = gbs(m,n,l); 	printf("最大公约数为%d最小公倍数为%d\n",l,s); 	system("pause"); 	return 0;       }  int gys(int m,int n) {	 	if(m>n) 		std::swap(m,n);  	int i=m; 	while(m!=0) 	{ 		if(m>n) 			std::swap(m,n);  		n=n-m; 	} 	if(n>0) 	  return (n); 	else 		return i; }  int gbs(int m,int n,int h) { 	int k,d; 	k=m*n; 	d=k/h;//改了 	return (d); }

user: user-4
content: 你的gys取的名字叫公约数, 最后感觉象是要返回公倍数, 错了有2处 m>n改成m>=n,退出循环直接返回n, 公倍数的代码就不要,函数也不要了

user: user-5
content: 参看：http://blog.csdn.net/iwm_next/article/details/7450424
user-0 提问: C语言中指针：不能通过改变指针形参的值而使指针实参的值改变

回复:
user: user-1
content: 还是不太懂呀

user: user-0
content: 引用 5 楼 paschen 的回复:[quote=引用 2 楼 Heessy 的回复:] =.=茅厕蹲开~~~！，那么代码1里面是不是要理解为这个函数将实参所指向的内存里面的内容发生交换？而代码2只是形参所拥有 的地址发生交换，并没有什么卵用？？  是的，代码1中 实参与形参（指针）的地址是不同的，但所指的内容是相同的 代码2 实参与形参（指针）的地址是不同的，交换形参没什么用[/quote] 66666666666茅厕蹲开，愁了我一晚上，总觉得是哪里不对，现在终于想明白了。

user: user-2
content: 引用 2 楼 Heessy 的回复:=.=茅厕蹲开~~~！，那么代码1里面是不是要理解为这个函数将实参所指向的内存里面的内容发生交换？而代码2只是形参所拥有 的地址发生交换，并没有什么卵用？？  是的，代码1中 实参与形参（指针）的地址是不同的，但所指的内容是相同的 代码2 实参与形参（指针）的地址是不同的，交换形参没什么用

user: user-3
content: 代码1在功能函数中是对指针所指向的栈地址中所存储的值进行操作，该地址的值是个主函数中的变量，除了主函数结束，不然值不会销毁，故能达到交换的效果，代码二和代码三是对功能函数的变量（形参的值）进行操作，待功能函数结束后即销毁。

user: user-0
content: 引用 1 楼 paschen 的回复:代码2与3都不会达到交换，因为你形参只是实参的一个副本，交换的只是一个复制后的数，然后函数结束时就清除了 代码1中形参是实参的一个副本，但他们所指向的内存确是同一个地方，所以可以达到交换 =.=茅厕蹲开~~~！，那么代码1里面是不是要理解为这个函数将实参所指向的内存里面的内容发生交换？而代码2只是形参所拥有 的地址发生交换，并没有什么卵用？？

user: user-0
content: =.=茅厕蹲开~~~！，那么代码1里面是不是要理解为这个函数将实参所指向的内存里面的内容发生交换？而代码2只是形参所拥有 的地址发生交换，并没有什么卵用？？

user: user-2
content: 代码2与3都不会达到交换，因为你形参只是实参的一个副本，交换的只是一个复制后的数，然后函数结束时就清除了 代码1中形参是实参的一个副本，但他们所指向的内存确是同一个地方，所以可以达到交换
user-0 提问: 菜鸟 求救 uint16 转 char

回复:
user: user-0
content: 这玩应自己有个函数 搞明白了

user: user-1
content: 如果是c语言只支持 (char)adc这样的写法。

user: user-0
content: 这 中国最大 IT 论坛  我终于来了
user-0 提问: 可变参函数的实现

回复:
user: user-1
content: http://blog.chinaunix.net/uid-21736802-id-1817658.html http://www.cnblogs.com/cpoint/p/3368993.html

user: user-2
content: 参看：http://blog.chinaunix.net/uid-21736802-id-1817658.html
user-0 提问: const int interval=RAND_MAX/10是什么意思？

回复:
user: user-1
content: 引用 4 楼 zhao4zhong1 的回复:VS IDE中，在不明白的符号上点鼠标右键，选转到定义。 方法很好，可是偷懒，我建议把头文件能背的都背下来最好～～

user: user-2
content: VS IDE中，在不明白的符号上点鼠标右键，选转到定义。

user: user-1
content: 引用 楼主 baidu_32921867 的回复:求解答，我是C语言菜鸟 楼主，我告诉你，你把分给我。。。  RAND_MAX 是一个宏定义，宏定义你应该知道，这个是头文件里面的宏定义。  具体在stdlib.h这个头文件中  打开这个头文件，搜索RAND_MAX，可以看到这一句：  #define RAND_MAX 0x7FFF  意思就是，它不是一般的变量，是头文件里面已经定义好的，用于随机数方面的应用；  —————————————————— 这个论坛里面难道就没人吗？？还是知道的太少？？我就奇怪了～～

user: user-3
content: 楼上正解！！

user: user-4
content: 就是定义一个常量interval，他的值等于RAND_MAX除以10后的结果
user-0 提问: 进来看看这个代码，按理说交换不了数据吧？

回复:
user: user-1
content: 仅供参考：#include <stdio.h> #define SWAP(a,b) do ((&(a))!=(&(b)))?((a)^=(b)^=(a)^=(b)):((a)=(a)); while (0) char   *p1="1" ,*p2="2" ; char    c1=1   , c2=2   ; short   s1=1   , s2=2   ; int     i1=1   , i2=2   ; __int64 I1=1i64, I2=2i64; float   f1=1.0f, f2=2.0f; double  d1=1.0 , d2=2.0 ; void main() {     SWAP((int)p1,(int)p2);                printf("char *     %5s,   %5s\n",p1,p2);     SWAP(c1,c2);                          printf("char       %5d,   %5d\n",c1,c2);     SWAP(s1,s2);                          printf("short      %5d,   %5d\n",s1,s2);     SWAP(i1,i2);                          printf("int        %5d,   %5d\n",i1,i2);     SWAP(I1,I2);                          printf("__int64 %5I64d,%5I64d\n",I1,I2);     SWAP(*(int     *)&f1,*(int     *)&f2);printf("float      %5g,   %5g\n",f1,f2);     SWAP(*(__int64 *)&d1,*(__int64 *)&d2);printf("double    %5lg,  %5lg\n",d1,d2);      SWAP(c1,c1);     printf("%d\n",c1); } //char *         2,       1 //char           2,       1 //short          2,       1 //int            2,       1 //__int64     2,    1 //float          2,       1 //double        2,      1 //2

user: user-2
content: void inv(int x[],int n)  //这里 数组会被退化成指针，所以呢，传入得实际上是数组的地址，故此会改变数组内容                                 //它操作的实际上是数组的地址内容，会改变原数组，而不是拷贝数组内容，拷贝的是数组的地址哟 {     int temp,i,j,m=(n-1)/2;     for(i=0;i<=m;i++)     {         j=n-1-i;         temp=x[i];         x[i]=x[j];         x[j]=temp;     }     return; }

user: user-3
content: 数组作为函数参数都是通过指针传递，而不是复制，这主要考虑了效率，所以你的函数等价于是void inv(int* x,int n)，传进去的是指向数组首地址的指针，你修改指针取到的地址上的值当然在main中会得到体现

user: user-4
content: 一楼说得对，inv传的a其实是指针哟，然后调用函数利用被调函数改了指针指向的值

user: user-5
content: inv的形式参数x得到了实际参数a的值，是一个地址，利用该地址找到了一片内存，把内存中的东西给改了
user-0 提问: printf

回复:
user: user-1
content: char *str="char *str=%c%s%c;main(){printf(str,34,str,34);}" ;   int main()   {    printf(str,34,str,34); //%c= 34 ,%s ="char *str=%c%s%c;main(){printf(str,34,str,34);}", %c=34    return 0;   } 所以是这样的啊

user: user-2
content: 34替换%c，34对应" ，%s对应str  printf(str,34,str,34); 中第一个参数是要格式的字符串，后面的34 str 34 依次替换了%c %s %c

user: user-3
content: 实现你没有理解 printf() 这个输出函数 其实第一个参数 就是一个字符串地址，可以是任何东西 ，它只不过会判断，该字符串中有没有 % 即格式占位符，如果有 它会向后寻找参数，然后替换；   str 代替了 以往我们自己写的 " "

user: user-4
content: 想自己打印自己吗， 真霸气，看不懂

user: user-5
content: 类似于 printf("char *str=%c%s%c;main(){printf(str,34,str,34);}", 34, "char *str=%c%s%c;main(){printf(str,34,str,34);}", 34);
user-0 提问: 逗号表达式与return

回复:
user: user-1
content: 这个叫条件运算符，并不是逗号表达式

user: user-2
content: return i>45 ?*p: *q;

user: user-3
content: return i>45 ?  (*p): (*q);

user: user-4
content: 引用 2 楼 akirya 的回复:return i>45 ?*p: *q; 这个是可以的；建议加上括号吧；

user: user-5
content: 错误也贴上来啊

user: user-6
content: return (i>45) ? (*p): return(*q);

user: user-7
content: 给1、2楼点赞

user: user-8
content: return i>45 ?*p: *q;

user: user-9
content: 改成 if 。  =============  return 不是表达式