正文

回答网友的问题:主题:关于指针及数组的基本概念问题2005-08-10 17:39:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/xiangyu/3657.html

分享到:

对本论坛上:主题:关于指针及数组的基本概念问题,的回答

提问作者id:nee   回答者:本人,id:xiangyu138
http://www.programfan.com/club/showbbs.asp?id=95120

1.请问如下的函数参数定义是不是相等的,用指针做参数有什么意义
Node(double *xyz) { x = xyz[0]; y = xyz[1]; z = xyz[2]; }
Node(double xyz[3]) { x = xyz[0]; y = xyz[1]; z = xyz[2]; }

答:两者是相等的,而且第一种其实更标准,因为第二种也是转化为第一种。在函数形式参数里是没有数组的,

都被转化为指针了。所以这时在函数里面没有办法通过像:sizeof(xyz)/sizeof(xyz[0])来取得数组元素的个数

(因为根本就不是数组),所以一般还要传递一个数组元素个数的值,否则编这个函数的人不知道你原来的数组

个数是多少。
如:Node(double xyz[],int n) { x = xyz[0]; y = xyz[1]; z = xyz[2]; }

2.单看double *xyz 的定义,是不是数或数组都可以传递。但是看了{ x = xyz[0]; y = xyz[1]; z = xyz[2]; }

这个具体实现所以才知道要传递一个数组过来?

答:这个完全错,是看形式参数double *xyz 就知道要传递一个一次指针(一次地址)过来,你要是传数值就会

出错的,而且不能传二次指针如:char **argv;的argv。
3.请问 main(int argc,char **argv)
这里面的char **argv 具体是表示的是什么意思,传递参数进来时,是应该传递一个指针还是其他,谢谢!

答:char **argv 是二次指针,也就是二次地址的意思,就是地址的地址(本身地址也是一个二进制数,它也需

要一个地址来保存的哦)。可以传char *aa[];这个是指针数组(也就是数组的元素是指针),或者是二次指针

char **a;

1.那为什么我看大部分都喜欢用指针而不直接用数组呢?我觉得用数组定义的很清楚啊
答:随便你了,没有所谓的大部分的,其实两者的速度差不多的。

3.传 char* p[3] = { "abc", "1234567", "呵呵" }; 时带了*
可以这么传吗,为什么
     char p[3] = { "abc", "1234567", "呵呵" };

答:上面那个是对的,也就是指针数组,因为你的字符串只能用指针(或数组)来存储,用指针来存储字符串首

字符的地址。

下面那个是错的,字符串不是单单一个字符,你不能用字符存储。

3.我的意思是,传递给 main的第二个参数,是直接传p,还是传*p,给他,可不可以
char p[3] = { "abc", "1234567", "呵呵" }
然后直接main(i ,p)来调用,还是应该main(i ,*p)调用

答:主函数一般不调用调用,要不然会造成递归无限调用。你本身char p[3] = { "abc", "1234567", "呵呵" }

这个就是错了。可以改为char *p[3] = { "abc", "1234567", "呵呵" }或者是char p[3][8] = { "abc",

"1234567", "呵呵" },这两者是有区别的(不解释了)

若你有个函数:void Node(char **xyz) {}或者void Node(char xyz[][8]) ;
你就可以Node(p);这样调用了。但是这时必须是指针数组不;你是二维数组:char *p[3] = { "abc",

"1234567", "呵呵" },否则会出错。若是二维数组char p[3][8] = { "abc", "1234567", "呵呵" };则函数应

是这样:void Node(char xyz[][8]) ;

例子:
#include<iostream>
using namespace std;
void Node(char **xyz) {cout<<"I love you!\n";}
void Node2(char *xyz[]) {cout<<"I love you!\n";}
void main(int a,char **bb)
{
    char *p[3] = { "abc", "1234567", "呵呵" };
    char pp[3][8] = { "abc", "1234567", "呵呵" };

    Node(p);
    Node2(p);


    //Node(pp);
}


 



阅读(3049) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册