这个指针类型是什么以及如何使用它?

时间:2015-02-22 09:11:48

标签: c++ c pointers

好吧所以我遇到了这个指针类型,我试图在我的代码中使用它,但我从编译器得到一个警告说它在不兼容的指针类型

这是类型

data_type (*i)[j]i是变量名称 并且j是指针的大小

例如,如果您希望指针的大小为4个整数,则需要声明

int (*i)[4]然后你需要分配一个4个整数的数组

i = &s[4]

然而,当我尝试分配它时,我收到来自编译器的警告incompatible type

所以这里的问题似乎是什么?以及如何正确使用它?

4 个答案:

答案 0 :(得分:6)

cdecl.org告诉我们它是:

int (*i)[4]
     

声明我是指向int

的数组4的指针

所以,我们可以像这样使用它:

int arr[4];
int (*i)[4] = &arr;

或者,堆分配内存:

int (*j)[4] = malloc(sizeof(int[4]));

答案 1 :(得分:3)

int (*i)[4];声明i是指向4 int数组的指针。您说s4 int

的数组
int s[4];  

作业

i = &s[4];  

是错误的,因为&s[4]是刚刚通过数组的内存块的地址,类型为int *。通常,数组会衰减成指向其第一个元素的指针,但是作为一元&运算符的操作数,它不会衰减,因此&s会给出数组s的地址。类型为int (*)[4]

i = &s;

答案 2 :(得分:1)

如果j是可变的,那么我建议改为使用std::vector并引用容器而不是指针:

std::vector<int> i(j);
auto& i_ref = i;

如果j是一个常量表达式,我仍然避免使用C风格的数组并改为使用std::array,并且仍然只使用引用:

constexpr std::size_t j = 4;
std::array<int, j> i;
auto& i_ref = i;

答案 3 :(得分:0)

这个

int s[4];

s声明为4 int的数组。

使用表达式s[4](在定义s之后)将评估为s的第5个元素(int)。

由于s只有4元素,所以这样做是非法的&#34;并引发程序未定义的行为。

所以要将int(*i)[4]的地址分配给s

 i = &s;

如果使用C99或更高版本初始化i而未声明s,您可能也会这样做:

i = &(int[4]){0};