user-0 提问: 新手学习求大神帮忙

回复:
user: user-1
content: #include <time.h> #include <stdlib.h> #include <windows.h> int main() {     int a,b[11];//本来是b[10]，为判断哪句越界，故意声明为b[11]      srand((unsigned int)time(NULL));//按两次F11，等黄色右箭头指向本行时，调试、新建断点、新建数据断点，地址：&b[10]，字节计数：4，确定。     while (1) {//按F5，会停在下面某句，此时a的值为10，b[10]已经被修改为对应0..4之一。         b[(a=rand()%11)]=0;         Sleep(100);         b[(a=rand()%11)]=1;         Sleep(100);         b[(a=rand()%11)]=2;         Sleep(100);         b[(a=rand()%11)]=3;         Sleep(100);         b[(a=rand()%11)]=4;         Sleep(100);     }     return 0; }  “多一少一”问题占程序员常犯错误的10%以上！ 避免“多一少一”问题的方法之一是将比如<10甚至<5的数代入程序片断，搬手指头心算验证一下程序到底应该写为 x、x-1、x+1中的哪个？ <、<=、==、>、>=中的哪个？

user: user-2
content: 那句a[11] = k越界了  int a[11]  有效的索引只是0-10

user: user-3
content: 找10个数中的最大数的C#源代码：http://www.manonggu.com/biancheng/328 大家可以看下

user: user-0
content: 引用 20楼_说个笑话纪念我 的回复:[quote=引用 19 楼 sinat_34555918 的回复:] [quote=引用 16楼小灸舞 的回复:][quote=引用 14 楼 sinat_34555918 的回复:] [quote=引用 12楼小灸舞 的回复:]什么鬼？楼主用的啥编译器？ 学校要求用VC6.0我知道很老了 可是我也没办法啊 好多东西在VC6.0上都运行不出来 现在很是头疼[/quote] 不是这个问题，楼主你真的手抖了，哈哈还抖了两次 1.int a[11];写成了int a[1]; 2.else分支里 printf("%d ", a[j]);写成了printf("%d ", &a[j]);[/quote]VC6.0有毒？换个编译器用!=也可以了[/quote]  反正我也是新手，用vs2015，自动排版都不用下插件。。。[/quote]VS2015更新过CRT函数 好多都改了用起来有点麻烦 不过自动排版确实很方便

user: user-1
content: 引用 15 楼 sinat_34555918 的回复:引用 13楼赵4老师 的回复:其实电脑开机后物理内存的每个字节都是可读写的，从来不会因为所谓的new、delete或malloc、free而被创建、销毁。区别仅在于操作系统内存管理模块在你读写时是否能发现并是否采取相应动作而已。操作系统管理内存的粒度不是字节而是页，一页通常为4KB。你在说啥 解释越界访问为什么不报错。

user: user-4
content: 引用 18 楼 sinat_34555918 的回复:[quote=引用 16楼小灸舞 的回复:][quote=引用 14 楼 sinat_34555918 的回复:] [quote=引用 12楼小灸舞 的回复:]什么鬼？楼主用的啥编译器？ 学校要求用VC6.0我知道很老了 可是我也没办法啊 好多东西在VC6.0上都运行不出来 现在很是头疼[/quote] 不是这个问题，楼主你真的手抖了，哈哈还抖了两次 1.int a[11];写成了int a[1]; 2.else分支里 printf("%d ", a[j]);写成了printf("%d ", &a[j]);[/quote]想再请教一下为什么第二个判断要用 if(k<a[i])而不能用if(k!=a[i]) 我用不等于来做的话就不执行第一个判断了直接进行第二个判断 还有k<a[i]是啥原理啊我没搞懂[/quote]  感觉用小于不完整。如果是1 2 3 4 5 6 7 8 9 10    输入100就直接跳过了，不过他思路给出了，改一改就行了

user: user-4
content: 引用 17 楼 sinat_34555918 的回复:[quote=引用 16楼小灸舞 的回复:][quote=引用 14 楼 sinat_34555918 的回复:] [quote=引用 12楼小灸舞 的回复:]什么鬼？楼主用的啥编译器？ 学校要求用VC6.0我知道很老了 可是我也没办法啊 好多东西在VC6.0上都运行不出来 现在很是头疼[/quote] 不是这个问题，楼主你真的手抖了，哈哈还抖了两次 1.int a[11];写成了int a[1]; 2.else分支里 printf("%d ", a[j]);写成了printf("%d ", &a[j]);[/quote]woc 丢人丢大了[/quote]  感觉用小于不完整。如果是1 2 3 4 5 6 7 8 9 10    输入100就直接跳过了

user: user-5
content: 引用 19 楼 sinat_34555918 的回复:[quote=引用 16楼小灸舞 的回复:][quote=引用 14 楼 sinat_34555918 的回复:] [quote=引用 12楼小灸舞 的回复:]什么鬼？楼主用的啥编译器？ 学校要求用VC6.0我知道很老了 可是我也没办法啊 好多东西在VC6.0上都运行不出来 现在很是头疼[/quote] 不是这个问题，楼主你真的手抖了，哈哈还抖了两次 1.int a[11];写成了int a[1]; 2.else分支里 printf("%d ", a[j]);写成了printf("%d ", &a[j]);[/quote]VC6.0有毒？换个编译器用!=也可以了[/quote]  反正我也是新手，用vs2015，自动排版都不用下插件。。。

user: user-0
content: 引用 4楼小灸舞 的回复: #include<stdio.h> void main() { 	int a[11]; 	int i, j, k , t; 	a[10] = 0; 	printf("请输入10个数:\n"); 	for(i = 0; i < 10; i++) 		scanf("%d", &a[i]); 	for(j = 0; j < 9; j++) 	{ 		for(i = 0; i < 9 - j; i++) 			if(a[i] > a[i + 1]) 			{ 				t = a[i]; a[i] = a[i + 1]; a[i + 1] = t; 			} 	} 	printf("请输入1个数:\n"); 	scanf("%d", &k); 	for(i = 0; i < 10; i++) 	{ 		if(k == a[i]) 		{ 			for(j = i; j < 9; j++) 				a[j] = a[j + 1]; 			printf("found\n"); 			printf("排序后为:\n"); 			for(j = 0; j < 9; j++) 				printf("%d ", a[j]); 			break; 		} 		else if(k < a[i]) 		{ 			for(j = 9; j >= i; j--) 				a[j + 1] = a[j]; 			a[i] = k; 			printf("not found\n"); 			printf("插入后为:\n"); 			for(j = 0; j < 11; j++) 				printf("%d ", a[j]); 			break; 		} 	} 	printf("\n"); }  找到了该元素，删除后：  没有该元素,添加后： 为什么我的会这样

user: user-6
content: 引用 1 楼 yuelengdihai 的回复:int a[11]；最大才是a[10] 哪来的a[11]啊 多开一个元素是为了放可能要插入的元素的

user: user-6
content: #include<stdio.h> void main() { 	int a[11]; 	int i, j, k , t; 	a[10] = 0; 	printf("请输入10个数:\n"); 	for(i = 0; i < 10; i++) 		scanf("%d", &a[i]); 	for(j = 0; j < 9; j++) 	{ 		for(i = 0; i < 9 - j; i++) 			if(a[i] > a[i + 1]) 			{ 				t = a[i]; a[i] = a[i + 1]; a[i + 1] = t; 			} 	} 	printf("请输入1个数:\n"); 	scanf("%d", &k); 	for(i = 0; i < 10; i++) 	{ 		if(k == a[i]) 		{ 			for(j = i; j < 9; j++) 				a[j] = a[j + 1]; 			printf("found\n"); 			printf("排序后为:\n"); 			for(j = 0; j < 9; j++) 				printf("%d ", a[j]); 			break; 		} 		else if(k < a[i]) 		{ 			for(j = 9; j >= i; j--) 				a[j + 1] = a[j]; 			a[i] = k; 			printf("not found\n"); 			printf("插入后为:\n"); 			for(j = 0; j < 11; j++) 				printf("%d ", a[j]); 			break; 		} 	} 	printf("\n"); }  找到了该元素，删除后：  没有该元素,添加后：

user: user-7
content: 引用 1 楼 yuelengdihai 的回复:int a[11]；最大才是a[10] 哪来的a[11]啊 int a[];

user: user-7
content: int a[11]；最大才是a[10] 哪来的a[11]啊

user: user-0
content: 引用 16楼小灸舞 的回复:[quote=引用 14 楼 sinat_34555918 的回复:] [quote=引用 12楼小灸舞 的回复:]什么鬼？楼主用的啥编译器？ 学校要求用VC6.0我知道很老了 可是我也没办法啊 好多东西在VC6.0上都运行不出来 现在很是头疼[/quote] 不是这个问题，楼主你真的手抖了，哈哈还抖了两次 1.int a[11];写成了int a[1]; 2.else分支里 printf("%d ", a[j]);写成了printf("%d ", &a[j]);[/quote]VC6.0有毒？换个编译器用!=也可以了

user: user-0
content: 引用 16楼小灸舞 的回复:[quote=引用 14 楼 sinat_34555918 的回复:] [quote=引用 12楼小灸舞 的回复:]什么鬼？楼主用的啥编译器？ 学校要求用VC6.0我知道很老了 可是我也没办法啊 好多东西在VC6.0上都运行不出来 现在很是头疼[/quote] 不是这个问题，楼主你真的手抖了，哈哈还抖了两次 1.int a[11];写成了int a[1]; 2.else分支里 printf("%d ", a[j]);写成了printf("%d ", &a[j]);[/quote]想再请教一下为什么第二个判断要用 if(k<a[i])而不能用if(k!=a[i]) 我用不等于来做的话就不执行第一个判断了直接进行第二个判断 还有k<a[i]是啥原理啊我没搞懂

user: user-0
content: 引用 16楼小灸舞 的回复:[quote=引用 14 楼 sinat_34555918 的回复:] [quote=引用 12楼小灸舞 的回复:]什么鬼？楼主用的啥编译器？ 学校要求用VC6.0我知道很老了 可是我也没办法啊 好多东西在VC6.0上都运行不出来 现在很是头疼[/quote] 不是这个问题，楼主你真的手抖了，哈哈还抖了两次 1.int a[11];写成了int a[1]; 2.else分支里 printf("%d ", a[j]);写成了printf("%d ", &a[j]);[/quote]woc 丢人丢大了

user: user-6
content: 引用 14 楼 sinat_34555918 的回复:[quote=引用 12楼小灸舞 的回复:]什么鬼？楼主用的啥编译器？ 学校要求用VC6.0我知道很老了 可是我也没办法啊 好多东西在VC6.0上都运行不出来 现在很是头疼[/quote] 不是这个问题，楼主你真的手抖了，哈哈还抖了两次 1.int a[11];写成了int a[1]; 2.else分支里 printf("%d ", a[j]);写成了printf("%d ", &a[j]);

user: user-0
content: 引用 12楼小灸舞 的回复:什么鬼？楼主用的啥编译器？ 学校要求用VC6.0我知道很老了 可是我也没办法啊 好多东西在VC6.0上都运行不出来 现在很是头疼

user: user-0
content: 引用 13楼赵4老师 的回复:其实电脑开机后物理内存的每个字节都是可读写的，从来不会因为所谓的new、delete或malloc、free而被创建、销毁。区别仅在于操作系统内存管理模块在你读写时是否能发现并是否采取相应动作而已。操作系统管理内存的粒度不是字节而是页，一页通常为4KB。你在说啥

user: user-1
content: 其实电脑开机后物理内存的每个字节都是可读写的，从来不会因为所谓的new、delete或malloc、free而被创建、销毁。区别仅在于操作系统内存管理模块在你读写时是否能发现并是否采取相应动作而已。操作系统管理内存的粒度不是字节而是页，一页通常为4KB。