答案:int类型是不能确定的。因为当申请该参数的时候,int类型就会被虚拟机赋默认值0所以无法根据是否是0来判断数据是否是用户数据还是系统默认值。除非你能确定用户传的参数不会是0
建议用Interger,int的封装类型。申请内存时为null。能不能说详细点,用了什么语言,既然定义了一个数组,什么叫未空
你可以用一个变量i,初值为-1,当给数组赋值时,就加1,去掉一个元素就减1,判断它是否等于-1就能判断数组是否为空
如果你不去遍历这个数组里的元素,怎么知道是不是0呢,初始化的时候C#里,数组就全是0了吧,不用循环的话,除非你不对它执行任何 *** 作,我不知道C#里有什么现成的方法能在不用循环的条件下,或者说不去遍历数组里的元素的情况下,就可以知道数组里的元素都是否为0
你可以照我上面的方法做,既然全0的时候是空,那么在你改变其中一个元素值的时候,就可以令i+1,还原到0的时候就i-1,最后只要看i的值,不就可以判断是否为空了,就不用循环了
输入444时的回车遗留在输入缓冲区里(因为scanf在%d控制下不接收回车符),被下面的scanf("%c",&y);当作一个字符接收了(回车符也是字符啊),所以while还要循环,直接要求你输入数据,但输入的是字母不是数字,scanf("%d",)不接收并留在输入缓冲区里,被下面的scanf("%c",&y);接收,while的()中不是0,所以printf就输出了上次接收的444。如此往复。
把scanf("%c",&y);改成scanf(" %c",&y);,即在%前加一个空格,把输入444时遗留在输入缓冲区里的'\n'吸收掉,就能等你输入数据了。但由于y是char型,无论输入什么都不会是0,所以while循环不会停止。
正确改法是在scanf("%c",&y);前加一句fflush(stdin);把输入错了数据从输入缓冲区中统统清除,并把while(y);改成while(y!='N');,则当输入N时程序就结束了。
这样的“子程序”很多情况下是用来提供一个值的,这就是通常的函数,这个值的类型必须明确,就是返回值的类型
但有的子程序不是用来提供一个值,可以仅仅是执行某些特定的 *** 作,那么,定义为空类型是安全的,表示“不允许该子程序返回值”。这种子程序只能通过独立的语句调用,不能用在表达式里
之所以需要空类型,是因为,函数的默认返回值类型是int,如果在函数定义时未带返回类型说明,则默认为int;即使函数中没有return语句,编译器按照函数返回值的原理,会返回一个不确定的值。如果将这样的函数错用在表达式里,语法上没错,但会带来很难察觉的逻辑错误。
而将空类型函数用在表达式里是一个编译错误。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)