c语言第11章作业参考答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
11.1 数组元素a[i]的用指针的间访表示为:*(a+i)。请写出:
b[i][j][k]的指针表示;
u[i][j][k][l][m][n]用指针的间访表示。
b[i][j][k] -> (*(b+i))[j][k] -> (*(*(b+i)+j))[k] -> *(*(*(b+i)+j)+k)
u[i][j][k][l][m][n] -> (*(u+i))[j][k][l][m][n] -> (*(*(u+i)+j))[k][l][m][n] -> (*(*(*(u+i)+j)+k))[l][m][n] -> (*(*(*(*(u+i)+j)+k)+l))[m][n]
-> (*(*(*(*(*(u+i)+j)+k)+l)+m))[n] -> *(*(*(*(*(*(u+i)+j)+k)+l)+m)+n) 11.2 设有声明:int a[2][3][4], *p;请写出用p间访a[i][j][k]的表达式。
(1)p=a; *(p+3*4*i+4*j+k)
(2)p=a[i]; *(p+4*j+k)
(3)p=a[i][j]; *(p+k)
#include
int main()
{
int i,j,k,a[2][3][4], *p;
for(i=0; i<2; i++)
for(j=0; j<3; j++)
for(k=0; k<4; k++)
*(*(*(a+i)+j)+k)=i*100+j*10+k;
i=1;j=2;k=3;
printf("%d\n",a[i][j][k]);
p=a;
printf("%d\n", *(p+3*4*i+4*j+k));
p=a[i];
printf("%d\n", *(p+4*j+k));
p=a[i][j];
printf("%d\n", *(p+k));
return 0;
}
11.3 设有声明:int a[2][3][4]; 请写出关于p的声明语句,使得可以用:(*(*(*(p+i)+j)+k)) 表示a[i][j][k]。
int (*p)[3][4]=a;
#include
int main()
{
int i,j,k,a[2][3][4], (*p)[3][4];
for(i=0; i<2; i++)
for(j=0; j<3; j++)
for(k=0; k<4; k++)
*(*(*(a+i)+j)+k)=i*100+j*10+k;
i=1;j=2;k=3;
printf("%d\n",a[i][j][k]);
p=a;
printf("%d\n", *(*(*(p+i)+j)+k));
p=a[i];
printf("%d\n", *(*(*(p)+j)+k));
p=a[i][j];
printf("%d\n", *(*(*(p))+k));
return 0;
}
11.5 解释下面的声明语句。
(1) float (*p)[2];
(2) char *p[5];
(3) char (*fp)(char *,int *);
(4) int *pf(float (*a)(int));
(5) int (*pf(char *))[5];
(1)p是指向数组的指针,所指向数组的长度为2,元素类型为float类型。
(2)p是长度为5、元素类型为char *的指针数组。
(3)fp是一个函数指针,所指函数带两个形参,一个形参为char *类型,另一个形参为
int *类型,所指函数返回值的类型为char类型。
(4)pf是返回值类型为int *的指针函数,它有一个函数指针类型的形参,该函数指针所
指函数有1个int类型的形参且返回值类型为float。
(5)pf是一个指针函数,有1个char *类型的形参,返回值类型为指向长度为5的int
型数组的指针。
11.6 解释下面的声明语句。
(1)char *(*p[2])(char *,char *);
(2) int (*(*pf)(char *))[3];
(3) char *(*a[2])(char (*)(int *),char *);
(4) int (*(*pf[3])(char *))(char *);
(5) char *(*(*(*f[2])(char *))[2])(char *,char *);
(1)p是长度为2的指针数组,元素类型为函数指针类型,所指函数带两个char *类型的形参,且返回值类型为char *类型。
(2)pf是一个函数指针,所指函数有1个char *类型的形参,且返回值类型为指向长度为3的int型数组的指针。
(3)a是长度为2的指针数组,元素类型为函数指针类型,所指函数有两个形参,一个形参类型为指向带一个int *类型形参且返回值类型为char的函数的函数指针,另一个形参类型char *类型,而所指函数返回值类型是char *类型。
(4)pf是长度为3的指针数组,元素类型为函数指针类型,所指函数有一个char *类型的形参,返回值类型是函数指针类型,该函数指针所指函数的形参为char *类型,返回值类型为int型。
(5)f是长度为2的指针数组,元素类型函数指针类型,所指函数有一个char *类型形参,返回值类型为指向长度为2的指针数组的指针,该指针数组元素类型为函数指针类型,所指函数有两个char *类型的形参,返回值类型为char *类型。
11.7 请根据下面各题的解释,写出其对应的声明语句。
(1) p是3个元素的函数指针数组,函数指针数组中每个元素所指向的函数是无参字符
指针函数。
(2) p是9个元素的指针数组,数组中每个元素是指向有一个整型参数、返回值为双精
度浮点型数的函数的指针
(3) p是函数指针,所指向的函数无参且返回一个指向3个元素的字符数组的指针。
(1)char *(*p[3])(void);
(2)double (*p[9])(int);
(3)char (*(*p)(void))[3];
11.8 请根据下面各题的解释,写出其对应的声明语句。
(1)p是3个元素的函数指针数组,函数指针数组中每个元素所指向的是无参、返回值为指向长度为4的整型数组的指针的指针函数。
(2)设f是一个无参函数,该函数返回指向有3个元素的函数指针数组的指针,该函数指针数组中的每个元素所指向的函数有一个字符指针形参,且返回值的类型是整型指针。
(1)int (*(*p[3])(void))[4];
(2)int *(*(* f(void))[3])(char *);
第(2)题示范代码:
#include
#include
int *(*(* f(void))[3])(char *);
int * pf(char *);