2 simplelife123 Simplelife123 于 2013.07.17 23:31 提问

如何在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个回答

DoctorCZM
DoctorCZM   2013.12.19 20: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代表数据的长度

Simplelife123
Simplelife123   2013.07.18 00:38

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

landengluo
landengluo   2013.07.18 02:07

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

a1193561652
a1193561652   Rxr 2015.05.19 16:38

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

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
C语言中数组指针 作为形参
2015 0605 在修改程序的过程中,看到两种将数组作为形参的方法,于是搜了一下,找了一下比较全面地介绍数组指针的文章。 先写下我遇到的两种方式: 方式1: void filter_c(long double *,long double *,float *,int);//函数声明 filter_c(NAFF_b,NAFF_a,RealTimeSignal_filter,len_ne
C专家编程之为什么C语言把数组形参当做指针:数组/指针实参
#include void print_array_test(char ca[]) { printf("ca : %s\n",ca); printf("&ca : %s\n",&ca); printf("&(ca[0]) : %s\n",&(ca[0])); printf("&(ca[1]) : %s\n",&(ca[1]));
C语言中指针数组作为参数传递修改内容
#include void change(char **strs){ strs[0] = "paaa"; strs[1] = "pbbb"; strs[2] = "cpcc"; strs[3] = "ddxd"; } int main() { char *strs[4]; int i; strs[0] = "aaa"; strs[1] = "bbb"; strs[2] =
结构体变量、结构指针变量、结构数组作为函数的参数应用实例分析 .
结构体变量、结构指针变量、结构数组作为函数的参数应用实例分析  struct stud {  long int num;   float score; }; /*结构体变量作为函数的参数,修改之后的成员值不能返回到主调函数*/ void funvr(struct stud t) {  t.num=2000101; t.score=71.0;  } /*结构体数组作为函数的参数,
[指针一]结构体数组作为形参传递,下标访问和指针访问使用该结构体
在通常结构化编程中,通常
C语言数组与指针作为传递参数的使用
学习笔记中的内容多少会有一点文不对题,因为C语言中数组无法作为函数的一个传递参数。而数组名在作为函数传递参数使用的时候实际上也被转换成了一个指针。 编写如下代码; #include"stdio.h"   char hello[] ="hello";   int main(void) {        printf("%s\n",hello);        printf("%s\
C语言用指向数组的指针作函数参数小例子
有一个班,3个学生,各学4门课,计算总平均分数以及第n个学生的成绩。这个题目是很简单的。只是为了说明用指向数组的指针作函数参数而举的例子。用函数average求总平均成绩,用函数search找出并输出第i个学生的成绩。有些网上给出的方法有bug,这个是我自己修改过的程序。
C语言中实参和形参问题&&函数使用数组作为参数的问题
引例: void f(int a) {    a = 3; } int main() {   int b = 2;   f(b); } 例子中:a是形参,b是实参 传递过程&&内存情况: 在被调用前,函数的形参是不分配内存的,也就是说,不调用f()的话,a不在内存里面 一旦调用了函数,马上为函数的形参分配内存,此时分配一个int空间大小的内存给a,此时,a和b在内存中
数组作与指针做参数比较
数组作与指针做参数比较C语言中的数组可分为一维数组和多维数组两类,而多维数组中又以二维数组最为常见。这里也仅针对这一维数组和二维数组作简要说明。高质量C++编程指南中指出当数组作为函数的参数进行传递时,该数组自动退化为同类型的指针,这句话针对一维数组是正确的(目前个人认为是正确的),但是对于多维数组,这显然不完全正确。C语言之所以把数组形参当作指针是出于效率考虑,如果把一个数组全部拷贝这样
C语言中数组名作为参数进行函数传递
C语言中数组名作为参数进行函数传递在普通变量或下标变量作函数参数时,形参变量和实参变量是由编译系统分配的两个不同的内存单元。在函数调用时发生的值传送是把实参变量的值赋予形参变量。在用数组名作函数参数时,不是进行值的传送,即不是把实参数组的每一个元素的值都赋予形参数组的各个元素。因为实际上形参数组并不存在,编译系统不为形参数组分配内存。那么,数据的传送是如何实现的呢?在我们曾介绍过,数组名就是数组的首