C语言数组问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言数组问题相关的知识,希望对你有一定的参考价值。

问题是从键盘任意输入10个整数,将其中最大数与最小数的位置对换,然后输出对换后的10个数。[提示:用一维数组存放这10个数]。要求输入的数用空格分开,输出的也是。我的程序如果要运行10 2 1 3 4 5 6 7 8 9就终止,这是为什么?求指导

#include#define N 11
void jiaohuan(int num[]);
int main()

int num[N],a;
for(a=0;a<N;a++)

scanf("%d",&num[a]);

jiaohuan(num);

for(a=0;a<N-1;a++)

printf("%d ",num[a]);

printf("%d",num[N-1]);
return 0;

void jiaohuan(int num[])

int u,i,max,min,b,c,qu;
max=num[0];
min=num[0];
for(u=1;u<N;u++)

if(max<num[u])

max=num[u];
b=u;


for(i=1;inum[i])

min=num[i];
c=i;


qu=num[b];
num[b]=num[c];
num[c]=qu;

程序问题不大,只是不太明白,为什么呢只用10个数字却定义十一个。另外处理方法里面的求取最大值和最小值,在一个for循环里面足够了。可能的错误就是一些变量最好都能在使用之前能够初始化,代码如下:

#include<stdio.h>
#define N 10
void jiaohuan(int num[]);
int main()

 int num[N],a;
 for(a=0;a<N;a++)
 
  scanf("%d",&num[a]);
 
 jiaohuan(num);

 for(a=0;a<N;a++)
 
  printf("%d ",num[a]);
 
// printf("%d",num[N-1]);
 return 0;

void jiaohuan(int num[])

 int u,max,min,b=0,c=0,qu;
 max=num[0];
 min=num[0];
 for(u=1;u<N;u++)
 
  if(max<num[u])
  
   max=num[u];
   b=u;
  
  if(min>num[u])
  
   min=num[u];
   c=u;
  
 
/* for(i=1;inum[i])
  
   min=num[i];
   c=i;
  
 */
 qu=num[b];
 num[b]=num[c];
 num[c]=qu;

参考技术A #include<stdio.h>
#define N 10
void jiaohuan(int * num);
int main()

int num[N],a;
for(a=0;a<N;a++)

scanf("%d",&num[a]);

jiaohuan(num);

for(a=0;a<N-1;a++)

printf("%d ",num[a]);

printf("%d",num[N-1]);
return 0;

void jiaohuan(int *num)

int u,i,max,min,b=0,c=0,qu;
max=num[0];
min=num[0];
for(u=1;u<N;u++)

if(max<num[u])

max=num[u];
b=u;

if(min>num[u])

min=num[u];
c=u;



qu=num[b];
num[b]=num[c];
num[c]=qu;
参考技术B 这里没错吗for(i=1;inum[i])

min=num[i];
c=i;

C语言三维数组问题

int p[3][4][5];
  int *q=(int *)p;
  int(*s)[5]=&p[1][0];
  int i;
  for(i=0;i<60;i++)
  q[i]=i;
  //printf("%d\n",p[1][7][1]);
  //printf("%d\n",(*(s+1))[3]);
  printf("%d\n",p[1][7][1]*(*(s+1))[3]);
这个怎么理解定义int p[3][4][5];引用的时候p[1][7][1]没有超出范围吗?大神给个详细的指点

在c语言,数组存储空间是连续的,所以三维数组其实可以看成特殊的一维数组,p[3][4][5]可以看成p[3*4*5]的一维数组,因此p[1][7][1] = p[1*4×5+7*5+1] = p[56] 56<3*4*5=60 ,所以p[1][7][1]没有超出范围 参考技术A C对数组的溢出是不检查的,数组名只以首地址的形式记录数组所对应的储存位置,引用的时候,不管怎么写也只是按照长度指向一段储存单位而已。 参考技术B 上面两位网友说得都对,推荐你看一本书:C语言深度解剖
上面数组和指针一节关于这些讲得很清楚。

以上是关于C语言数组问题的主要内容,如果未能解决你的问题,请参考以下文章

C语言数组问题

C语言数组初始化问题。

C语言三维数组问题

c语言数组排序好输出问题

C语言数组排序问题

c语言数组问题