c语言指针问题
帮忙看一下
程序功能:编写一个函数模板,实现用冒泡法对数组A的n个元素进行排序操作。
#include<iostream>
using namespace std;
template <class T>
void sort(T a,int b){
int i,j;
T k;
for(i=0;i<b;i++){
for(j=0;j<b-i;j++)
if(a[j]>a[j+1]){
a[j]=a[j+1]; k=&(a[j+1]); a[j]=*k;
}
}
cout<<"数据从小到大排列:"<<endl;
for(i=0;i<b;i++)
cout<<a[i]<<" ";
}
void main(){
int n;
cout<<"数据大小:";
cin>>n;
int *A=new int[n];
cout<<"输入数据:"<<endl;
for(int i=0;i<n;i++)
cin>>A[i];
sort(A,n);
delete A;
}
你程序的排序有问题的,首先,你的
T k;
在你程序中,相当于
int *k; //这里的k是个野指针.没有分配内存,而你的程序能正常运行已是你的幸运了
我一时想不出,像你这种模板设置该怎么给k申请内存,只能这样
T k=(T) new char[8]; //给k申请8个字节,一般基本类型够用了
而你的排序算法及循环,也都不对,改为
for(i=0; i<b; i++)
{
for(j=0; j<b-i-1; j++)//你原来的循环也会导致下标溢出的
if(a[j]>a[j+1])
{
*k=a[j];
a[j]=a[j+1];
a[j+1]=*k;
}
}
就应该可以了
热门标签: