BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #81603同步于 2014/8/18
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

[问题]cin问题,求大神带走

tlxlggg
2014/8/18镜像同步9 回复
这段代码假如我从控制台输入3 5 9 11 33 6 -9 -76 100 123 则只会输入3,求大神分析原因。谢谢 #include <iostream> using namespace std; template <typename T> int getArrayLenth(T& tArray){ return (sizeof(tArray)/sizeof(tArray[0])); } template <typename T1> void sort(T1 a[10]){ for(int index=0;index<getArrayLenth(a)-1;index++){ if(a[index]>a[index+1]){ int temp=a[index]; a[index]=a[index+1]; a[index+1]=temp; } } for(int index=0;index<getArrayLenth(a);index++){ cout<<a[index]<<"\t"; } cout<<endl; } int main(){ int a[10]; for(int index=0;index<getArrayLenth(a);index++){ cin>>a[index]; } sort(a); int w; cin>>w; return 0; }
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
wangxiaobupt机器人#1 · 2014/8/18
sort函数的传参问题吧 你可以把sort函数里面的 getArrayLenth(a)打印出来看看 不如还用T1 &a呢
tlxlggg机器人#2 · 2014/8/18
【 在 wangxiaobupt 的大作中提到: 】 : sort函数的传参问题吧 : 你可以把sort函数里面的 getArrayLenth(a)打印出来看看 : : ................... 我通过debug看到a中的元素就只有1个3,一直都分析不出原因,有时候cout也只会输出一个元素。会不会是vs的原因?或者说使用模板会有影响?
wangxiaobupt机器人#3 · 2014/8/18
你通过debug 看到 getArrayLenth(a)多大了么 是10么 换句话说 第一个for循环到底执行了几次 第二个for循环又执行了几次呢 【 在 tlxlggg 的大作中提到: 】 : 我通过debug看到a中的元素就只有1个3,一直都分析不出原因,有时候cout也只会输出一个元素。会不会是vs的原因?或者说使用模板会有影响?
gaoweiwei机器人#4 · 2014/8/18
数组名退化了吧
tlxlggg机器人#5 · 2014/8/18
【 在 wangxiaobupt 的大作中提到: 】 : sort函数的传参问题吧 : 你可以把sort函数里面的 getArrayLenth(a)打印出来看看 : : ................... 问题好像解决了。但是为什么写sort(T1 a[])不行,而用sort(T1 &a)就行呢。c++新学,还请大神能不吝赐教。
wangxiaobupt机器人#6 · 2014/8/18
正确的那种是引用类型的 传入的可以看作 你定义的那个数组 你原来那种是非引用类型 也就是将你数组的地址拷贝给另一个指针了 称为数组退化为指针 此时你通过这个新指针是没法通过 sizeof(a/a[0])得到数组大小的 【 在 tlxlggg 的大作中提到: 】 : 问题好像解决了。但是为什么写sort(T1 a[])不行,而用sort(T1 &a)就行呢。c++新学,还请大神能不吝赐教。
tlxlggg机器人#7 · 2014/8/18
【 在 wangxiaobupt 的大作中提到: 】 : 正确的那种是引用类型的 传入的可以看作 你定义的那个数组 : 你原来那种是非引用类型 也就是将你数组的地址拷贝给另一个指针了 称为数组退化为指针 : 此时你通过这个新指针是没法通过 sizeof(a/a[0])得到数组大小的 : ................... 喔喔,了解了!多谢大神的指点![em12]
banbantu机器人#8 · 2014/8/18
sizeof(tArray)/sizeof(tArray[0]),在函数中不能计算数组大小的
deare1300机器人#9 · 2014/8/23
sort(T1 a[10]),这个和sort(T1 *a)是一样的, c/c++无法赋值数组的,传递的是数组地址