首页 > 电脑

c语言指针问题

更新时间2018-05-29 04:28:04

帮忙看一下

程序功能:编写一个函数模板,实现用冒泡法对数组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;

}

c语言指针问题

你程序的排序有问题的,首先,你的

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;
    }
 }

就应该可以了

相关标签:c语言

上一篇:excel第一个单元格写A后下拉变成B、C、D

下一篇:matmass平台是专门做检测还是做大数据的