寒假刷题之函数指针数组

简介: 寒假刷题之函数指针数组
 1.声明一个指向含有10个元素的数组的指针,其中每个元素是一个函数指针,该函数的返回值是int,参数是int*,正确的是( )💗

A.(int *p[10])(int*)

B.int [10]*p(int *)

C.int (*(*p)[10])(int *)

D.int ((int *)[10])*p

C正确。*先和p结合表明是一个指针,然后(*p)与[10]结合表明指向含有事业元素的数组的指针,类型是int(*)(int *),每个元素类型是函数指针,函数的返回值是int,参数是int *。
2.关于回调函数描述错误的是( )💗

A.回调函数就是一个通过函数指针调用的函数

B.回调函数一般通过函数指针实现

C.回调函数一般不是函数的实现方调用,而是在特定的场景下,由另外一方调用。

D.回调函数是调用函数指针指向函数的函数。

D错误。回调函数是调用函数指针指向的函数。
3.(多选)下面test函数设计正确的是:( )💗

char* arr[5] = {"hello", "bit"};

test(arr);

A.void test(char* arr);

B.void test(char** arr);

C.void test(char arr[5]);

D.void test(char* arr[5]);

B、D正确,因为arr是char*的数组,函数传参需要二级指针接收
4.下面程序的结果是:( )💗
int main()
{
  int aa[2][5] = {10,9,8,7,6,5,4,3,2,1};
  //&aa取出的是整个数组的地址,&aa+1表示跳过一整个数组后的地址
  int *ptr1 = (int *)(&aa + 1);
  //aa表示二维数组第一行的地址,+1则表示二维数组第二行的地址,相当于aa[1]==5
  int *ptr2 = (int *)(*(aa + 1));
  *(ptr2-1)表示向前移动一个字节解引用,也就是6
  printf( "%d,%d", *(ptr1 - 1), *(ptr2 - 1));
  //*(ptr-1)表示的是数组跳过一整个数组的地址向前移动一个字节,访问到的是1的地址,解引用得到1
  return 0;
}

image.gif

A.1, 6

B.10, 5

C.10, 1

D.1, 5

所以结果 A正确。
5.下面代码中print_arr函数参数设计哪个是正确的?( )💗
int arr[3][5] = {1,2,3,4,5,6,7,8,9,10};
 print_arr(arr, 3, 5);

image.gif

A.void print_arr(int arr[][],int row, int col);

B.void print_arr(int* arr, int row, int col);

C.void print_arr(int (*arr)[5], int row, int col);

D.void print_arr(int (*arr)[3], int row, int col);

A.修改为void print_arr(int arr[][5],int row, int col);B.形参是二维数组,错误。C.正确,形参是数组指针。D二维数组不可以省略列,所以3改为5
6.下面程序的结果是:( )💗
int main()
{
  int a[5] = {5, 4, 3, 2, 1};
  %a取到整个数组的地址,+1表示跳过整个数组的大小
  int *ptr = (int *)(&a + 1);
  //*(a+1),a表示数组首元素的地址,+1表示向后跳一个字节的大小,即a[0]+1==a[1]==4
  //ptr等于a[5]的地址,-1表示向前跳一个字节的大小,也就是a[5]-1==a[4]==1
  printf( "%d,%d", *(a + 1), *(ptr - 1));
  return 0;
}

image.gif

A.5, 1

B.4, 1

C.4, 2

D.5, 2

B正确。
目录
相关文章
|
20天前
使用指针访问数组元素
【10月更文挑战第30天】使用指针访问数组元素。
30 3
|
19天前
使用指针访问数组元素
【10月更文挑战第31天】使用指针访问数组元素。
30 2
|
28天前
|
算法 索引
单链表题+数组题(快慢指针和左右指针)
单链表题+数组题(快慢指针和左右指针)
32 1
|
1月前
|
存储
如何使用指针数组来实现动态二维数组
指针数组可以用来实现动态二维数组。首先,定义一个指向指针的指针变量,并使用 `malloc` 为它分配内存,然后为每个子数组分配内存。通过这种方式,可以灵活地创建和管理不同大小的二维数组。
|
1月前
|
存储
如何通过指针数组来实现二维数组?
介绍了二维数组和指针数组的概念及其区别,详细讲解了如何使用指针数组模拟二维数组,包括定义与分配内存、访问和赋值元素、以及正确释放内存的步骤,适用于需要动态处理二维数据的场景。
|
1月前
|
存储 算法 C语言
C语言:什么是指针数组,它有什么用
指针数组是C语言中一种特殊的数据结构,每个元素都是一个指针。它用于存储多个内存地址,方便对多个变量或数组进行操作,常用于字符串处理、动态内存分配等场景。
|
1月前
魔法指针 之 二级指针 指针数组
魔法指针 之 二级指针 指针数组
19 1
|
1月前
|
存储
一篇文章了解区分指针数组,数组指针,函数指针,链表。
一篇文章了解区分指针数组,数组指针,函数指针,链表。
19 0
|
1月前
|
编译器 C语言
【C语言】指针篇-深入探索数组名和指针数组- 必读指南(2/5)
【C语言】指针篇-深入探索数组名和指针数组- 必读指南(2/5)
|
3月前
|
搜索推荐 C语言
指针与数组
指针与数组
59 9
下一篇
无影云桌面