如何为已声明的指向int指针数组的指针正确赋值?
正确赋值写法
直接对指针变量p赋值即可:
p = &arr;
原写法报错的原因
你尝试的(*p)[] = &arr;完全不符合C语法规则:
- 带空方括号的
(*p)[]写法仅能用于变量声明场景,不能出现在赋值语句的左值位置 - 你需要修改的是指针变量
p本身的指向,p的类型是「指向int*类型数组的指针」,和&arr(arr数组的地址,类型为指向长度为3的int*数组的指针)完全兼容,可以直接赋值。
完整可运行示例
#include <stdio.h> int main() { int *arr[3]; int a = 1, b = 2, c = 3; // 给arr数组元素赋值 arr[0] = &a; arr[1] = &b; arr[2] = &c; // 先声明指针 int *(*p)[]; // 直接赋值 p = &arr; // 验证取值正常 printf("%d\n", *(*p)[0]); // 输出 1 printf("%d\n", *(*p)[1]); // 输出 2 printf("%d\n", *(*p)[2]); // 输出 3 return 0; }
可选优化
如果要避免部分编译器报「指向不完整数组类型的指针」相关警告,可以在声明指针时明确指定数组长度,赋值逻辑不变:
// 声明时指定数组长度,和arr的长度匹配 int *(*p)[3]; p = &arr;
内容的提问来源于stack exchange,提问作者Catherine
相关产品推荐
相关产品推荐

