在问几个关于c++的问题

来源:百度知道 编辑:UC知道 时间:2024/09/23 23:38:52
1。已知一函数的形参说明为double *(*p)[10],则下列数组可以作为对应实参的是()
A double *F[10]
B double *F[5][10]
C double F[5][10]
D double *(*F)[10]
书上的答案是B,请问为什么A,C,D是错的,解释下??
2。指针数组中的元素是地址吗?
3.
在主函数里调用的是max("ABC",XYZ)

char *max(char *x,char *y){return (x>y)?x:y;}
char max(char *x,char *y){return (x>y)?x:y;}
请问这2个会产生什么结果,还有加*和不加*有什么区别??
请大哥大姐们帮忙解决下,由于刚刚学c++有好多不懂

1.已知一函数的形参说明为double *(*p)[10],则下列数组可以作为对应实参的是()

我先解释一下double **p[10],这表示定义了一个指针数组,共10个指针,每个指针指向一个一维double数组。(方括号[]运算级别比*高,加括号可以改变结合顺序。)

现在解释double *(*p)[10] ,和前面不同的是,这里没有10个指针,只有一个指针。但是这个指针比较特殊,它指向一个二维double数组,这个二维double数组有10列,行数暂时不确定。

A:double *F[10],不选。定义了一个指针数组,共10个指针,每个指针指向一个double值。
B:选。
C:double F[5][10],不选。根本不涉及到指针。
D:double *(*F)[10],实参必须要有确定的值,这里数组行数不确定,所以不行。

2.指针数组中的元素是地址吗?

指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。
指针数组中的元素是一系列特殊的变量。

不管什么类型的指针,在32位平台里,指针本身占据了4个字节的长度。你只要用函数sizeof(指针的类型)测一下就知道了。

3.在主函数里调用的是max("ABC",XYZ)
char *max(char *x,char *y){return (x>y)?x:y;}
char max(char *x,char *y){return (x>y)?x:y;}
请问这2个会产生什么结果,还有加*和不加*有什么区别??

经过下面的程序调试发现,char max(char *x,char *y){return (x>y)?x:y;}定义有错误。
char *max(char *x,char *y){return (x>y)?x:y;} 返回的是x和y中较大的字符串的地址(或者说返回一个个指针)。

#include <stdio.h>
char *max(char *x