C指针进阶:多维数组与函数指针精解
指针与多维数组的关系
多维数组在内存中以连续线性方式存储。例如,二维数组 int arr[3][4] 可视为由3个一维数组(每行4个元素)组成。指针访问时,arr 是首行地址,arr[i] 是第 i 行首元素地址,*(arr+i)+j 等价于 &arr[i][j]。
代码示例:
int arr[3][4] = {{1,2,3,4}, {5,6,7,8}, {9,10,11,12}};
int (*ptr)[4] = arr; // 指向含4个元素的一维数组的指针
printf("%d", *(*(ptr+1)+2)); // 输出7,即arr[1][2]
函数指针的高级应用
函数指针可指向不同函数,实现动态调用。结合结构体或回调机制,能构建灵活的逻辑框架。
示例:回调函数实现排序策略
typedef int (*CompareFunc)(int, int);
void sort(int *arr, int size, CompareFunc cmp) {
for (int i=0; i<size-1; i++) {
for (int j=0; j<size-i-1; j++) {
if (cmp(arr[j], arr[j+1]) > 0) {
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
int ascending(int a, int b) { return a - b; }
int descending(int a, int b) { return b - a; }
指针与动态内存的深度管理
动态内存分配需严格匹配释放操作。常见错误包括内存泄漏(未释放)和悬垂指针(释放后访问)。
安全实践:
int *create_array(int size) {
int *arr = (int*)malloc(size * sizeof(int));
if (arr == NULL) { exit(EXIT_FAILURE); }
return arr;
}
void free_array(int **arr) {
free(*arr);
*arr = NULL; // 避免悬垂指针
}
指针与结构体的复杂交互
结构体指针常用于链式数据结构(如链表、树)。通过指针嵌套,可构建多层次结构。
链表节点示例:
typedef struct Node {
int data;
struct Node *next;
} Node;
void insert(Node **head, int value) {
Node *new_node = (Node*)malloc(sizeof(Node));
new_node->data = value;
new_node->next = *head;
*head = new_node;
}
指针的类型转换与对齐问题
强制类型转换需谨慎,尤其是涉及内存对齐时。例如,将 void* 转为具体类型指针时,需确保目标类型对齐要求。
示例:
void *raw_data = malloc(8);
double *dbl_ptr = (double*)raw_data; // 假设系统对齐满足double要求
*dbl_ptr = 3.14;
指针运算的底层细节
指针加减运算以指向类型的大小为步长。例如,int *p 执行 p+1 时,实际地址增加 sizeof(int) 字节。
地址差计算示例:
int arr[5] = {0};
int *p1 = &arr[0], *p2 = &arr[4];
printf("%td", p2 - p1); // 输出4(元素间隔数,非字节数)
安全性与防御性编程
- 使用
const限定符防止意外修改(如const int*或int* const)。 - 检查指针非空后再解引用。
- 避免野指针:初始化时为指针赋
NULL,释放后立即置空。
以上内容涵盖了指针进阶的核心技术点,结合实际代码和底层原理分析,适合深入理解C语言指针的高级特性。
BbS.okane050.info/PoSt/1121_889411.HtM
BbS.okane051.info/PoSt/1121_877986.HtM
BbS.okane052.info/PoSt/1121_315186.HtM
BbS.okane053.info/PoSt/1121_037288.HtM
BbS.okane054.info/PoSt/1121_023887.HtM
BbS.okane055.info/PoSt/1121_618200.HtM
BbS.okane056.info/PoSt/1121_710878.HtM
BbS.okane057.info/PoSt/1121_005663.HtM
BbS.okane058.info/PoSt/1121_899037.HtM
BbS.okane059.info/PoSt/1121_874137.HtM
BbS.okane050.info/PoSt/1121_388763.HtM
BbS.okane051.info/PoSt/1121_478094.HtM
BbS.okane052.info/PoSt/1121_078345.HtM
BbS.okane053.info/PoSt/1121_158549.HtM
BbS.okane054.info/PoSt/1121_535836.HtM
BbS.okane055.info/PoSt/1121_147303.HtM
BbS.okane056.info/PoSt/1121_971933.HtM
BbS.okane057.info/PoSt/1121_340340.HtM
BbS.okane058.info/PoSt/1121_853545.HtM
BbS.okane059.info/PoSt/1121_959216.HtM
BbS.okane050.info/PoSt/1121_653655.HtM
BbS.okane051.info/PoSt/1121_709964.HtM
BbS.okane052.info/PoSt/1121_214815.HtM
BbS.okane053.info/PoSt/1121_950182.HtM
BbS.okane054.info/PoSt/1121_680377.HtM
BbS.okane055.info/PoSt/1121_447319.HtM
BbS.okane056.info/PoSt/1121_148645.HtM
BbS.okane057.info/PoSt/1121_287697.HtM
BbS.okane058.info/PoSt/1121_788160.HtM
BbS.okane059.info/PoSt/1121_439114.HtM
BbS.okane050.info/PoSt/1121_878226.HtM
BbS.okane051.info/PoSt/1121_809977.HtM
BbS.okane052.info/PoSt/1121_213197.HtM
BbS.okane053.info/PoSt/1121_918584.HtM
BbS.okane054.info/PoSt/1121_611670.HtM
BbS.okane055.info/PoSt/1121_224114.HtM
BbS.okane056.info/PoSt/1121_851536.HtM
BbS.okane057.info/PoSt/1121_174868.HtM
BbS.okane058.info/PoSt/1121_649695.HtM
BbS.okane059.info/PoSt/1121_199351.HtM
BbS.okane060.info/PoSt/1121_200290.HtM
BbS.okane061.info/PoSt/1121_103576.HtM
BbS.okane062.info/PoSt/1121_872211.HtM
BbS.okane063.info/PoSt/1121_072674.HtM
BbS.okane065.info/PoSt/1121_775692.HtM
BbS.okane066.info/PoSt/1121_222649.HtM
BbS.okane067.info/PoSt/1121_010207.HtM
BbS.okane068.info/PoSt/1121_011346.HtM
BbS.okane069.info/PoSt/1121_709581.HtM
BbS.okane070.info/PoSt/1121_384336.HtM
BbS.okane060.info/PoSt/1121_234985.HtM
BbS.okane061.info/PoSt/1121_751344.HtM
BbS.okane062.info/PoSt/1121_024865.HtM
BbS.okane063.info/PoSt/1121_382656.HtM
BbS.okane065.info/PoSt/1121_742066.HtM
BbS.okane066.info/PoSt/1121_871491.HtM
BbS.okane067.info/PoSt/1121_531348.HtM
BbS.okane068.info/PoSt/1121_380980.HtM
BbS.okane069.info/PoSt/1121_138627.HtM
BbS.okane070.info/PoSt/1121_319053.HtM
BbS.okane060.info/PoSt/1121_795455.HtM
BbS.okane061.info/PoSt/1121_542859.HtM
BbS.okane062.info/PoSt/1121_030160.HtM
BbS.okane063.info/PoSt/1121_132173.HtM
BbS.okane065.info/PoSt/1121_668686.HtM
BbS.okane066.info/PoSt/1121_472541.HtM
BbS.okane067.info/PoSt/1121_031106.HtM
BbS.okane068.info/PoSt/1121_514469.HtM
BbS.okane069.info/PoSt/1121_405426.HtM
BbS.okane070.info/PoSt/1121_069795.HtM
BbS.okane060.info/PoSt/1121_732709.HtM
BbS.okane061.info/PoSt/1121_954768.HtM
BbS.okane062.info/PoSt/1121_810801.HtM
BbS.okane063.info/PoSt/1121_628794.HtM
BbS.okane065.info/PoSt/1121_340759.HtM
BbS.okane066.info/PoSt/1121_970705.HtM
BbS.okane067.info/PoSt/1121_524211.HtM
BbS.okane068.info/PoSt/1121_341810.HtM
BbS.okane069.info/PoSt/1121_894058.HtM
BbS.okane070.info/PoSt/1121_297006.HtM


