每天花三分钟学习一个C语言知识。
问题4
请解释一下C语言中的指针数组和数组指针。它们有什么不同?
参考答案
当面试官问到C语言中的指针数组和数组指针时,可以从概念、示例和区别几个方面详细说明了它们的含义和区别。
指针数组和数组指针是C语言中涉及指针和数组的两个不同概念,虽然它们都涉及到数组和指针的结合使用,但在语法和语义上存在一些区别。
- 「指针数组:」指针数组是一个数组,其中的每个元素都是一个指针。这意味着每个元素可以指向一个不同的内存位置。这些指针可以指向不同类型的数据,如整数、字符、结构体等。通常,指针数组用于存储一组指针,每个指针可以指向一个独立的数据对象。示例:
int num1 = 10, num2 = 20, num3 = 30;
int *ptrArray[3]; // 声明一个指针数组,每个元素是指向int的指针
ptrArray[0] = &num1;
ptrArray[1] = &num2;
ptrArray[2] = &num3;
printf("%dn", *ptrArray[0]); // 输出 10
- 「数组指针:」数组指针是一个指针,它指向一个数组。数组指针本身并不存储数据,而是指向一个数组的首元素。数组指针可以通过指针算术运算遍历数组的元素。数组指针通常用于在函数中传递数组,或者用于动态分配多维数组。示例:
int arr[3] = {10, 20, 30};
int (*ptrToArr)[3]; // 声明一个指向包含3个int元素的数组的指针
ptrToArr = &arr;
printf("%dn", (*ptrToArr)[0]); // 输出 10
「区别:」
- 主要区别在于数组指针本身是一个指针,而指针数组本身是一个数组。指针数组的元素是指针,数组指针指向数组的首元素。
- 数组指针可以通过指针算术运算遍历数组的元素,而指针数组的元素是指针,不能通过指针算术运算直接访问数组元素。
- 数组指针在函数参数传递中常用于传递数组,指针数组用于存储多个指针,每个指针可以指向不同的数据。
总结来说,指针数组和数组指针是C语言中两个涉及指针和数组的不同概念。指针数组是一个数组,其中的每个元素是指针;数组指针是一个指针,指向一个数组的首元素。