指针数组和数组指针的区别详细介绍【C语言】【指针】

2024-06-04 12:48:55 浏览数 (1)

指针数组和数组指针是C语言中常用的数据结构,它们可以在处理内存动态分配、多维数组、函数指针等方面提供便利。虽然指针数组和数组指针的名字十分相似,但是它们是两个截然不同的概念,下面进行详细介绍:

一、指针数组

指针数组: 指针数组是一个数组,其中的每个元素都是指针类型。这意味着每个元素都包

                   一个内存地址,指向内存中的某个位置。指针数组常用于以下情况:

  • 存储不同类型的数据:通过将指针数组的每个元素设置为不同类型的指针,可以存储不同类型的数据。
  • 传递数组到函数:可以通过将指针数组作为参数传递到函数中来访问数组。
  • 动态内存分配:指针数组可以用于动态分配内存。

 下面是一个指针数组的实例:

代码语言:javascript复制
#include<stdio.h>
int main()
{
	int* ptrArray[5];  // 声明一个包含5个指向整数的指针的数组

	int a = 1, b = 2, c = 3, d = 4, e = 5;
	ptrArray[0] = &a;
	ptrArray[1] = &b;
	ptrArray[2] = &c;
	ptrArray[3] = &d;
	ptrArray[4] = &e;

	for (int i = 0; i < 5; i  ) 
	{
		printf("%d ", *ptrArray[i]);
	}

}

上面的示例中,我们声明了一个包含 5 个指向整数的指针的数组,并将每个指针设置为不同的整数变量的地址。然后,我们可以使用指针数组中的元素访问相应的变量。 

二、数组指针

数组指针: 数组指针是一个指针,它指向一个数组。这意味着它包含一个内存地址,指向内存中的一个数组。数组指针常用于以下情况:

  • 访问多维数组:可以使用数组指针来访问多维数组中的元素。
  • 动态内存分配:数组指针可以用于动态分配内存。
  • 函数指针:可以使用数组指针来定义函数指针类型。

下面是一个数组指针的实例:

代码语言:javascript复制
#include<stdio.h>
int main()
{
    int arr[2][3] = { {1, 2, 3}, {4, 5, 6} };  // 声明一个包含2行3列的二维数组
    int(*ptr)[3];  // 声明一个指向包含3个整数的数组的指针
    ptr = arr;
    for (int i = 0; i < 2; i  )
    {
        for (int j = 0; j < 3; j  )
        {
            printf("%d ", *(*(ptr   i)   j));
        }
        printf("n");
    }

}

在上面的示例中,我们声明了一个包含 2 行 3 列的二维数组,并定义了一个指向包含 3 个整数的数组的指针。我们将数组 arr 的地址赋值给指针 ptr,然后使用指针来访问数组中的元素。

三、总结

需要注意的是,指针数组和数组指针都是指针类型,它们在声明时需要指定存储的元素类型或指向的数组类型,并且使用时需要进行解引用。此外,指针数组和数组指针的使用方式不同,需要根据具体情况进行选择。 

0 人点赞