关于数组参数的问题,在线等!!!!!!跟贴就有分!!!!!

时间:2008-05-13 15:41:35   来源:论坛整理  作者:  编辑:chinaitzhe
void func1(struct tmp *arr[],int arrCount);
void func2(struct tmp2 *arr[],int arrCount);
void f();
struct tmp
{
char s1[10];
char s2[10];
};
void f()
{
struct tmp value[2];
strcpy(value[0].s1, "00001 ");
strcpy(value[0].s2, "test ");
strcpy(value[1].s1, "00002 ");
strcpy(value[1].s2. "test2 ");

func1(value,2); //此处的调用,第一个参数到底传什么呢?
}
void func1(struct tmp *arr[],int arrCount)
{
func2(arr,arrCount); //此处的调用,第一个参数又传什么呢?

}
这个问题我一直都搞不明白,似乎怎么传都有问题
才开始看c,请高手帮忙指点一下吧!

网友回复:struct tmp
{
char s1[10];
char s2[10];
};
放到最前面去
网友回复:func2的参数也是tmp,刚才写错了
void func2(struct tmp *arr[],int arrCount);

网友回复:
引用 1 楼 dubiousway 的回复:
struct tmp
{
char s1[10];
char s2[10];
};
放到最前面去



嗯,就放在最前面,可是后面的函数调用的时候,参数应该用什么方式传递呢?

网友回复:void func1(struct tmp *arr[],int arrCount);
void func2(struct tmp2 *arr[],int arrCount);

改成:
(去掉 *)
void func1(struct tmp arr[],int arrCount);
void func2(struct tmp2 arr[],int arrCount);

网友回复:
引用 4 楼 dubiousway 的回复:
void func1(struct tmp *arr[],int arrCount);
void func2(struct tmp2 *arr[],int arrCount);

改成:
(去掉 *)
void func1(struct tmp arr[],int arrCount);
void func2(struct tmp2 arr[],int arrCount);


这个方法我也试验了,可是在调用func1的时候,就报错,说段错误,程序直接退出

网友回复:没看明白,up

网友回复:func2这个函数没有函数体,也就是没定义。有点晕。
网友回复:
引用 7 楼 xiaooqiang 的回复:
func2这个函数没有函数体,也就是没定义。有点晕。


func2函数体没有写出来,不过无所谓,我只要知道调用的时候第一个参数是用什么样的形式传递就可以了

网友回复:
C/C code





Code highlighting produced by Actipro CodeHighlighter (freeware)

http://www.CodeHighlighter.com/





#include <stdio.h>

#include <string.h>



struct   tmp 

{ 

      char   s1[10]; 

      char   s2[10]; 

}; 



void   func1(struct tmp arr[], int   arrCount); 

void   func2(struct tmp arr[],int   arrCount); 

void   f(); 





void main(){

    f();

}



void   f() 

{ 

      struct tmp value[2];

      strcpy(value[0].s1, "00001 ");

      strcpy(value[0].s2, "test ");

      strcpy(value[1].s1, "00002 ");

      strcpy(value[1].s2, "test2 ");

      

      func1(value,2);   //} 

void   func1(struct   tmp   arr[],int   arrCount) 

{ 

      func2(arr,arrCount);     //

} 

void   func2(struct   tmp   arr[],int   arrCount) 

{ 

      //

} 








网友回复:void func1(struct tmp *arr[],int arrCount);
void func2(struct tmp2 *arr[],int arrCount);
这样函数第一个参数传入的是一个指向结构体的指针数组了,应该改为
void func1(struct tmp arr[],int arrCount);
void func2(struct tmp2 arr[],int arrCount);
或者
void func1(struct tmp *arr,int arrCount);
void func2(struct tmp2 *arr,int arrCount);
这样函数第一个参数传入的是数组的首地址值.
网友回复:跟贴就有分!!!!! 冲着这句来的 -。-
网友回复:JF先。。
网友回复:void func1(struct tmp *arr[],int arrCount);
void func2(struct tmp2 *arr[],int arrCount);

修改为
void func1(struct tmp *arr,int arrCount);
void func2(struct tmp2 *arr,int arrCount);
网友回复:楼主你很粗心,呵呵。。。
C/C code





Code highlighting produced by Actipro CodeHighlighter (freeware)

http://www.CodeHighlighter.com/





void   func1(struct   tmp   arr[],int   arrCount);     // 去掉*

void   func2(struct   tmp   arr[],int   arrCount);     // 去掉*,而且不是tmp2,是tmp

void   f(); 

struct   tmp 

{ 

    char   s1[10]; 

    char   s2[10]; 

}; 

void   f() 

{ 

    struct   tmp   value[2]; 

    strcpy(value[0].s1, "00001 "); 

    strcpy(value[0].s2, "test "); 

    strcpy(value[1].s1, "00002 "); 

    strcpy(value[1].s2, "test2 "); 

    

    func1(value,2);   //此处的调用,第一个参数到底传什么呢?     

} 

void   func1(struct   tmp   arr[],int   arrCount)                 // 去掉*

{ 

    func2(arr,arrCount);     //此处的调用,第一个参数又传什么呢? 

    

}




两个都是传递数组的头指针,没有问题
网友回复:你的函数调用的过程中传的应该都是地址
func1(value,2);
func2(arr,arrCount);
但声明的时候,第一个参数却是一个结构体的指针数组,类型不匹配吧
就像10说的那样是正解~~

网友回复:void func1(struct tmp *arr[],int arrCount);
这个函数声明需要接收的参数是一个数组名,数组里面的对象是struct tmp 类型的指针。
所以你传value当然有问题了。value是struct tmp 类型。
网友回复:
C/C code





Code highlighting produced by Actipro CodeHighlighter (freeware)

http://www.CodeHighlighter.com/





#include <stdio.h>

#include <string.h>

struct    tmp 

{

    char s1[10]; 

    char s2[10]; 

}; 



void func1(struct tmp *arr , int arrCount); 

void func2(struct tmp *arr , int arrCount); 

void f(); 



void f() 

{

    struct tmp value[2]; 

    strcpy(value[0].s1 , "00001 "); 

    strcpy(value[0].s2 , "test " ); 

    strcpy(value[1].s1 , "00002 "); 

    strcpy(value[1].s2 , "test2 "); 

      

    func1(value,2);   //此处的调用,第一个参数到传的是value这个数组的地址    

} 

void func1(struct tmp *arr , int arrCount) 

{ 

    func2(arr,arrCount);     //此处的调用,第一个参数传的是arr的地址 

} 



void func2(struct tmp *arr , int arrCount) 

{ 



} 





int main()

{

    f() ;          

    return 0 ;

}






网友回复:jf
网友回复:
#include <stdio.h>
#include <string.h>
struct tmp
{
char s1[10];
char s2[10];
};

void func1(struct tmp arr[] , int arrCount);
void func2(struct tmp arr[] , int arrCount);
void f();

void f()
{
struct tmp value[2];
strcpy(value[0].s1 , "00001 ");
strcpy(value[0].s2 , "test " );
strcpy(value[1].s1 , "00002 ");
strcpy(value[1].s2 , "test2 ");

func1(value,2); //此处的调用,第一个参数到传的是value这个数组的地址
}
void func1(struct tmp arr[] , int arrCount)
{
func2(arr,arrCount); //此处的调用,第一个参数传的是arr的地址
}

void func2(struct tmp arr[] , int arrCount)
{

}


int main()
{
f() ;
return 0;
}
网友回复:数组做参数的问题,窃分..
网友回复: func1(value,2); //此处的调用,第一个参数到底传什么呢?
//////////////////////////////////////////////
你传得是结构体数组,你函数声明与函数调用不一致
void func1(struct tmp *arr[],int arrCount);
改为:
void func1(struct tmp arr[],int arrCount);

void func1(struct tmp *arr,int arrCount);


网友回复:=>
网友回复:参数不对, 接分
网友回复:func1(value,2);
func2(arr,arrCount);
网友回复:庆祝楼主解决问题,把剩下的分都给我吧!
网友回复:跟贴就有分!!!!!
网友回复:the pointer to value;

网友回复:帮楼主整理了下,并找出了问题...

C/C code





Code highlighting produced by Actipro CodeHighlighter (freeware)

http://www.CodeHighlighter.com/







#include "string.h"



struct tmp 

{ 

    char s1[10];

    char s2[10];

}; 



void func1( struct tmp *arr, int arrCount ); 

void func2( struct tmp *arr, int arrCount ); 

void f( void ); 



void f()

{ 

    struct tmp value[2];



    strcpy( value[0].s1, "00001" );

    strcpy( value[0].s2, "test" );

    strcpy( value[1].s1, "00002" );

    strcpy( value[1].s2, "test2" );//此处楼主用成了点strcpy( value[1].s2. "test2" );,所以报错



    func1( value, 2 );   //此处的调用,第一个参数到底传什么呢?  

}



void func1( struct tmp *arr, int arrCount)

{ 

    func2( arr,arrCount );     //此处的调用,第一个参数又传什么呢?

} 



int main()

{

    f();



    return 0;

}






网友回复:至于参数杂传前面都说得很具体了...
网友回复:接分
网友回复:接分
网友回复:
引用 9 楼 dubiousway 的回复:
C/C code
#include <stdio.h>
#include <string.h>

struct tmp
{
char s1[10];
char s2[10];
};

void func1(struct tmp arr[], int arrCount);
void func2(struct tmp arr[],int arrCount);
void f();


void main(){
f();
}

void f()
{
struct tmp value[2];
strcpy(value[0].s1, "00001 ");
strcpy(value[0].s2, "test ");




赞成。
网友回复:
C/C code





Code highlighting produced by Actipro CodeHighlighter (freeware)

http://www.CodeHighlighter.com/





void   func1(struct   tmp   *arr[],int   arrCount); 

void   func2(struct   tmp2   *arr[],int   arrCount); 

void   f(); 

struct   tmp 

{ 

      char   s1[10]; 

      char   s2[10]; 

}; 

void   f() 

{ 

      struct   tmp   value[2]; 

      strcpy(value[0].s1, "00001 "); 

      strcpy(value[0].s2, "test "); 

      strcpy(value[1].s1, "00002 "); 

      strcpy(value[1].s2. "test2 "); 

      

      func1(&value,2);   //此处的调用,第一个参数到底传什么呢?     

} 

void   func1(struct   tmp   *arr[],int   arrCount) 

{ 

      func2(arr,arrCount);     //此处的调用,第一个参数又传什么呢? 



} 





lz就是没搞清楚数组名,指针以及数组指针的概念。

建议lz好好看看《C专家编程》
网友回复:楼上都答了,偶来接分
网友回复:问题都解决了。我冲接分来的。
网友回复:问题都解决了。我也冲接分来的。
网友回复:来晚了,
只接分。
网友回复:来晚了,楼上说得够具体了,
只接分。
网友回复:接分

网友回复:up楼上
网友回复:没看出有什么太大的问题啊
网友回复:jf
网友回复:
引用 17 楼 kilvdn 的回复:
C/C code
#include <stdio.h>
#include <string.h>
struct tmp
{
char s1[10];
char s2[10];
};

void func1(struct tmp *arr , int arrCount);
void func2(struct tmp *arr , int arrCount);
void f();

void f()
{
struct tmp value[2];
strcpy(value[0].s1 , "00001 ");
strcpy(value[0].s2 , "test " );
strcpy(value[1].s1 , "00002 ");
strcpy(value[1].…


来晚了,被回答了
数组名其实是一个地址,只要用一个指向该类型的指针就可以引用这个数组了
网友回复:up
网友回复:#include <stdio.h>
#include <string.h>

struct tmp
{
char s1[10];
char s2[10];
};

void func1(struct tmp arr[], int arrCount);
void func2(struct tmp arr[],int arrCount);
void f();


void main(){
f();
}

void f()
{
struct tmp value[2];
strcpy(value[0].s1, "00001 ");
strcpy(value[0].s2, "test ");
strcpy(value[1].s1, "00002 ");
strcpy(value[1].s2, "test2 ");

func1(value,2); //}
void func1(struct tmp arr[],int arrCount)
{
func2(arr,arrCount); //
}
void func2(struct tmp arr[],int arrCount)
{
//
}

网友回复:pointer seems be better than the value transfer.
网友回复:看帖子后,有收获,顶起!虽然我不知道什么原因。
网友回复:都答完了,jf!!
网友回复:数组名就代表了地址 不需要再加*
网友回复:
引用 14 楼 Mnky 的回复:
楼主你很粗心,呵呵。。。

C/C code
void func1(struct tmp arr[],int arrCount); // 去掉*
void func2(struct tmp arr[],int arrCount); // 去掉*,而且不是tmp2,是tmp
void f();
struct tmp
{
char s1[10];
char s2[10];
};
void f()
{
struct tmp value[2];
strcpy(value[0].s1, "00001 ");
strcpy(value[0].s2, "test ");
s…

网友回复:额,楼上好多人都已经解释过了
网友回复:我是新手!!!!!我是菜鸟····我 承认!!!!
我什么都不懂
请高手家我QQ以后有什么不懂的好方便联系我QQ285076015
想加一些全国各地玩PSP2000的MM家我
我是MM

网友回复:假如是楼主那样的写法,func1的参数是结构体指针数组,也就是 struct tmp** 类型的参数,而 value 是 struct tmp* 类型的,不匹配啊

这样改一下,编译通过,不知有没有其他方法直接改 value 的

void func1(struct tmp *arr[],int arrCount);
void func2(struct tmp *arr[],int arrCount);
void f();
struct tmp
{
char s1[10];
char s2[10];
};
void f()
{
struct tmp value[2];
struct tmp* arr[2];
arr[0] = value;
arr[1] = value 1;
strcpy(value[0].s1, "00001 ");
strcpy(value[0].s2, "test ");
strcpy(value[1].s1, "00002 ");
strcpy(value[1].s2, "test2 ");

//func1(value,2); //此处的调用,第一个参数到底传什么呢?
func1(arr, 2);
}
void func1(struct tmp *arr[],int arrCount)
{
//func2(arr,arrCount); //此处的调用,第一个参数又传什么呢?

}
网友回复:pass by...
网友回复:JF
网友回复:假如func1(&value,2);
请楼主试一下
网友回复:友情接分
网友回复:Layer: 14, 28, 53 is OK.

[]: precedence 1
* : precedence 2
网友回复:来晚了接分
网友回复:恩,同意
网友回复:
引用 14 楼 Mnky 的回复:
楼主你很粗心,呵呵。。。

C/C code
void func1(struct tmp arr[],int arrCount); // 去掉*
void func2(struct tmp arr[],int arrCount); // 去掉*,而且不是tmp2,是tmp
void f();
struct tmp
{
char s1[10];
char s2[10];
};
void f()
{
struct tmp value[2];
strcpy(value[0].s1, "00001 ");
strcpy(value[0].s2, "test ");
s…


应该就是这样的吧
网友回复:1. struct tmp *arr
2. struct tmp arr[]
3. struct tmp *arr[]

数组名其实就是代表一个地址,和指针的效果是一样的。
也就是说1和2是一样的效果。
而3中则表示的效果如同struct tmp **arr,是个指向指针的指针。。
至于传值,楼上各位已经说的很清楚了
网友回复:没说的了
网友回复:顶
网友回复:注重统一参数
关键字:数组,参数,问题,跟贴,

文章评论

共有 0 位网友发表了评论 此处只显示部分留言 点击查看完整评论页面