__JerryChan
2013-07-17 15:31
采纳率: 100%
浏览 3.4k
已采纳

如何在C语言中以数组指针作为形参输出数组

#include "stdafx.h"
void cmdsend(unsigned int * info);
int main()
{

unsigned int senddata[5];
senddata[0] = 8;
senddata[1] = 2;
senddata[2] = 0;
senddata[3] = 4;
senddata[4] = 5;
cmdsend( senddata );

while(1){;}

}

void cmdsend(unsigned int * info)
{
unsigned int k;
for (k = 0; ((*info) != '\0') && (info != NULL); *info++, k++)
printf("senddata is %d\r\n", *info);
}
如上面程序所示,我想将数组sendata完整的输出,现在只能打印出8,2.即在sendata[2]处结束,好像判断为 info == NULL了,请问应该怎样修改,才能输出完整数组?在使用 *info 指针作为形参的前提下。

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • 寧靜以致遠 2013-12-19 12:16
    已采纳

    上面的已经分析了原因,中间断断条件有问题,指针越界以后可能不会为null,这时你的判断条件不会终止,所以继续向下执行,导致不确定的后果,最好采用如下形式比较安全:
    void cmdsend(unsigned int * info, int len)
    {
    unsigned int k;
    for (k = 0; k < len, k++)
    printf("senddata is %d\r\n", *(info+k));
    }
    其中len代表数据的长度

    打赏 评论
  • __JerryChan 2013-07-17 16:38

    因为'\0'的ASCII码就是 0 !!!!!!

    打赏 评论
  • Noah_Zuo 2013-07-17 18:07

    相互比较的时候会把'\0'转化为ASCII码,也就是0,所以停在第二个了……

    打赏 评论
  • 纵横车 2015-05-19 08:38

    senddata[2] 的值为0所以根据你的(*info) != '\0'的判断就会输出到senddata[2]就停止,如果想遇‘\0’则结尾的话,可以把senddata数组声明成char型。

    打赏 评论

相关推荐 更多相似问题