本文共 1201 字,大约阅读时间需要 4 分钟。
在C语言中,指针数组是一种特殊的数组类型,其每个成员都是指针。以下是指针数组的定义示例:
char* arr[10]; // 一个包含10个char*成员的指针数组
每个char*成员占4字节,因此整个数组的大小为40字节(10 × 4)。指针数组的每个成员可以存储另一个指针,指向字符、字符串或其他数据结构的地址。
可以通过两种方式赋值给指针数组:
直接赋值:
int main() { char* a = "Hello"; char* b = "Cracker"; char* arr[2] = {a, b};}编译器会将"Hello"和"Cracker"存储在常量区内存,并将这些地址赋值给arr数组中的成员。
逐个赋值:
char* arr[2];arr[0] = a;arr[1] = b;
初始化方式:
char* arr[2] = {"Hello", "Cracker"};需要注意的是,指针数组中的每个成员类型必须与初始化的值一致,否则会导致类型转换错误。
任何类型都可以定义为数组,包括结构体。以下是结构体指针数组的示例:
struct Point { int X; int Y;};struct Point point; // 结构体变量struct Point arr[10]; // 结构体数组,包含10个结构体成员struct Point* pArr[10]; // 结构体指针数组,包含10个指针成员 结构体数组的大小和每个成员的内存占用与普通数组相同,只是每个成员是一个结构体或结构体指针。
数组指针是一种特殊的指针类型,可以指向数组的首地址。以下是数组指针的定义与使用示例:
int arr[] = {1, 2, 3, 4, 5};int(*pArr)[5] = &arr;printf("%d", (*pArr)[0]); // 输出1 数组指针的使用步骤如下:
定义数组指针:
int arr[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};int(*pArr)[3] = &arr[0];访问数组元素:
printf("%d,%d", (*pArr)[0], (*pArr)[1]); // 输出1,2需要注意的是,数组指针的定义方式与普通数组不同,需使用&运算符获取数组的首地址,并在使用时减少指针的层级。
malloc或calloc动态分配数组内存,然后将指针赋值给数组指针变量。通过以上知识,可以更好地理解和使用指针数组与数组指针,灵活地进行内存操作和数据管理。
转载地址:http://diwc.baihongyu.com/