关于数组参数的问题,在线等!!!!!!跟贴就有分!!!!!
时间:2008-05-13 15:41:35
来源:论坛整理 作者: 编辑:chinaitzhe
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);
网友回复:
嗯,就放在最前面,可是后面的函数调用的时候,参数应该用什么方式传递呢?
网友回复: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这个函数没有函数体,也就是没定义。有点晕。
网友回复:
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; }
网友回复:至于参数杂传前面都说得很具体了...
网友回复:接分
网友回复:接分
网友回复:
赞成。
网友回复:
- 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
网友回复:
来晚了,被回答了
数组名其实是一个地址,只要用一个指向该类型的指针就可以引用这个数组了
网友回复: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!!
网友回复:数组名就代表了地址 不需要再加*
网友回复:
网友回复:额,楼上好多人都已经解释过了
网友回复:我是新手!!!!!我是菜鸟····我 承认!!!!
我什么都不懂
请高手家我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
网友回复:来晚了接分
网友回复:恩,同意
网友回复:
应该就是这样的吧
网友回复:1. struct tmp *arr
2. struct tmp arr[]
3. struct tmp *arr[]
数组名其实就是代表一个地址,和指针的效果是一样的。
也就是说1和2是一样的效果。
而3中则表示的效果如同struct tmp **arr,是个指向指针的指针。。
至于传值,楼上各位已经说的很清楚了
网友回复:没说的了
网友回复:顶
网友回复:注重统一参数
关键字:数组,参数,问题,跟贴,
下一篇:下面没有链接了











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