指针数组本质是数组,数组里面的每一个元素是指针类型。
内存分布与存储位置: - 指针数组本质:指针数组是一个存储指针的数组,这个数组的每个元素都是指针,它们分别指向不同的内存地址。这些指针的存储位置在内存的栈或全局数据段(取决于它的声明位置)。 - 每个指针指向的地址:这些指针可以指向任意的内存位置,例如堆(动态分配的内存)或栈(局部变量的地址)等。指针数组的元素只保存地址,而不直接存储指向数据。
实例:
#include <stdio.h>
int main()
{
int arr[5] = {1, 2, 3, 4, 5};
int *ptarr[5];
for (int i = 0; i < 5; i++)
{
ptarr[i] = &arr[i];
}
printf("\n-----------------------\n");
for (int i = 0; i < 5;i++)
{
printf("parr[%d] addree=%d ,value=%d\n", i, ptarr[i], *ptarr[i]);
}
printf("ptarr size is :%d\n", sizeof(ptarr));
return 0;
}
数组指针本质是指针,是指向一个数组类型的指针变量。
内存分布与存储位置: - 数组指针本质:数组指针是一个指向数组的指针,它存储的是一个数组的起始地址。这个指针的存储位置与指针数组相似,也可以位于栈或全局数据段(取决于声明的位置)。 - 数组本身:ptr 指向的数组是实际存储数据的区域。数组的存储空间通常分配在栈或堆中(如果是静态数组,通常在栈中;如果是通过动态分配,通常在堆中)。数组的内存是连续的,所有元素在内存中是紧挨着存储的。
实例:
#include <stdio.h>
int main()
{
int arr[5] = {1, 2, 3, 4, 5};
int(*ptarr)[5] = arr;
printf("arr address is :%d", &arr);
//printf("arr address is :%d", arr);
printf("\n-----------------------\n");
for (int i = 0; i < 5;i++)
{
printf("parr[%d] addree=%d ,value=%d\n", i, *ptarr, *(*(ptarr)+i));
}
printf("ptarr size is :%d\n", sizeof(ptarr)); //8 ,数组指针本身的大小
printf("ptarr size is :%d\n", sizeof(*ptarr)); //20 ,指向数组所占用的内存大小
return 0;
}
