背景
今天刚上复旦大一的表弟问我一道题,说是死循环,我在codeblocks里运行并不是死循环,报出一个signal警告停止运行。数组越界了,冒泡排序写的也有点问题。但是主要原因在输入输出方面,回顾了下指针的概念,最后终于发现问题所在,指针在使用前一定要初始化
资料
C语言指针的初始化和赋值
问题总结成一个典型错误
int *p;
*p = 7;
这里就要深入指针的物理概念了,第一行定义了一个int指针类型变量p,但是没有将具体的内存中的地址赋给它,所以不能赋值
原始题目
编写输入、输出、排序3个函数。3个函数都以指针数组和数组元素个数为形参,分别实现将一组离散的变量顺序输入、输出和从大到小排序。
改进
#include<stdio.h>
int shuru(int *p[],int n1)
{
int i1;
for (i1=0;i1<n1;i1++) scanf("%d",p[i1]);
}
int shuchu(int *q[],int n2)
{
int i2;
for (i2=0;i2<n2;i2++) printf("%d ",*q[i2]);
}
int paixu(int *h[],int n3)
{
int i3,i4,t;
for (i3=0;i3<n3;i3++)
for (i4=0;i4<n3-i3-1;i4++)
if(*h[i4]>*h[i4+1])
{ t=*h[i4];*h[i4]=*h[i4+1];*h[i4+1]=t; }
}
int main()
{
int n,a[1000]={0},*qp[1000];
// for (int i=0;i<1000 ;i++ )//这里是我补充的
// {
// qp[i]=&a[i];
// }
scanf("%d",&n);
shuru(qp,n);
paixu(qp,n);
shuchu(qp,n);
return 0;
}