寒假刷题之函数指针数组

简介: 寒假刷题之函数指针数组
 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正确。
目录
相关文章
|
3月前
|
存储 程序员 编译器
C 语言数组与指针的深度剖析与应用
在C语言中,数组与指针是核心概念,二者既独立又紧密相连。数组是在连续内存中存储相同类型数据的结构,而指针则存储内存地址,二者结合可在数据处理、函数传参等方面发挥巨大作用。掌握它们的特性和关系,对于优化程序性能、灵活处理数据结构至关重要。
|
3月前
|
容器
在使用指针数组进行动态内存分配时,如何避免内存泄漏
在使用指针数组进行动态内存分配时,避免内存泄漏的关键在于确保每个分配的内存块都能被正确释放。具体做法包括:1. 分配后立即检查是否成功;2. 使用完成后及时释放内存;3. 避免重复释放同一内存地址;4. 尽量使用智能指针或容器类管理内存。
|
3月前
|
存储 C语言 计算机视觉
在C语言中指针数组和数组指针在动态内存分配中的应用
在C语言中,指针数组和数组指针均可用于动态内存分配。指针数组是数组的每个元素都是指针,可用于指向多个动态分配的内存块;数组指针则指向一个数组,可动态分配和管理大型数据结构。两者结合使用,灵活高效地管理内存。
|
3月前
|
存储 NoSQL 编译器
C 语言中指针数组与数组指针的辨析与应用
在C语言中,指针数组和数组指针是两个容易混淆但用途不同的概念。指针数组是一个数组,其元素是指针类型;而数组指针是指向数组的指针。两者在声明、使用及内存布局上各有特点,正确理解它们有助于更高效地编程。
|
3月前
|
存储 人工智能 算法
数据结构实验之C 语言的函数数组指针结构体知识
本实验旨在复习C语言中的函数、数组、指针、结构体与共用体等核心概念,并通过具体编程任务加深理解。任务包括输出100以内所有素数、逆序排列一维数组、查找二维数组中的鞍点、利用指针输出二维数组元素,以及使用结构体和共用体处理教师与学生信息。每个任务不仅强化了基本语法的应用,还涉及到了算法逻辑的设计与优化。实验结果显示,学生能够有效掌握并运用这些知识完成指定任务。
81 4
|
3月前
使用指针访问数组元素
【10月更文挑战第31天】使用指针访问数组元素。
63 2
|
3月前
使用指针访问数组元素
【10月更文挑战第30天】使用指针访问数组元素。
53 3
|
3月前
|
算法 索引
单链表题+数组题(快慢指针和左右指针)
单链表题+数组题(快慢指针和左右指针)
51 1
|
4月前
|
存储
如何使用指针数组来实现动态二维数组
指针数组可以用来实现动态二维数组。首先,定义一个指向指针的指针变量,并使用 `malloc` 为它分配内存,然后为每个子数组分配内存。通过这种方式,可以灵活地创建和管理不同大小的二维数组。
|
4月前
|
存储
如何通过指针数组来实现二维数组?
介绍了二维数组和指针数组的概念及其区别,详细讲解了如何使用指针数组模拟二维数组,包括定义与分配内存、访问和赋值元素、以及正确释放内存的步骤,适用于需要动态处理二维数据的场景。

热门文章

最新文章