c语言指针问题 - 爱问答

(爱问答)

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;

}

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语言

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

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

热门标签:
excel 网盘 破解 word dll
最新更新:
微软重新评估新的Outlook的使用时机 联想推出搭载联发科Helio G80芯片组的Tab M9平板 英特尔创新大赛时间确定! 微软Edge浏览器在稳定渠道中推出Workspaces功能 英伟达RTX4060TiGPU推出MaxSun动漫主题! 谷歌地图为用户提供了街景服务! GameSir 在T4 Kaleid中推出了一款出色的控制器! 微软开始在Windows 11 中测试其画图应用程序的新深色模式! LG电子推出全球首款无线OLED电视 英伟达人工智能芯片崭露头角! Steam Deck可以玩什么游戏-Steam Deck价格限时优惠 雷蛇推出CobraPro鼠标 Kindle电子阅读器可以访问谷歌商店吗 Windows10如何加入组策略 window10图片查看器怎么没有了?