对本论坛上:主题:关于指针及数组的基本概念问题,的回答
提问作者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);
}
正文
回答网友的问题:主题:关于指针及数组的基本概念问题2005-08-10 17:39:00
【评论】 【打印】 【字体:大 中 小】 本文链接:http://blog.pfan.cn/xiangyu/3657.html
阅读(3049) | 评论(0)
版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!
评论