我可以使用 [][] 访问类型 int (*)[] 吗?

标签 c pointers casting multidimensional-array

来自这个问题“What does (int (*)[])var1 stand for?”,我试图像访问多维数组一样访问强制转换的结果。但我收到以下错误:“assignment from incompatible pointer type”后跟段错误。我还尝试了其他一些变体,但都没有用。如何在函数 example 中直接访问 var1 中的元素?

谢谢!

 #include <stdlib.h>

int i(int n,int m,int var1[n][m]) {
  var1[0][0]=5;
  return var1[0][0];
}

int example() {
  int *var1 = malloc(100);

  // works
  int var2;
  var2 = i(10,10,(int (*)[])var1);
  printf("var2=%i",var2);
  //doesn't work I
  int *var3;
  var3=(int (*)[])var1; //"assignment from incompatible pointer type"
  printf("var3[0][0]=%i",var3[0][0]);


  //doesn't work II
  int *var4;
  var4=var1;
  printf("var4[0][0]=%i",var4[0][0]); //" error: subscripted value is neither array nor pointer"

  //doesn't work III
  int **var5;
  var5=var1;
  printf("var5[0][0]=%i",var5[0][0]); // assignment from incompatible pointer type


  return(1); 

} 

int main(){
  int a;
  a=example();
  return(1);
}

最佳答案

int *var3;
var3 = (int (*)[])var1;

您正在将已经是 int*var1 转换为 int(*)[] (指向 int 数组的指针)并分配它到 var3 这又是 int*

就这样

var3 = var1

关于我可以使用 [][] 访问类型 int (*)[] 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2973856/

相关文章:

objective-c - 将 ObjC id<Protocol> 和类型对象转换为 C 指针 (void *) 然后将其转换回去是否安全?

c - 实现音节化算法但真的很慢

c - x86-64 上的 long double 是什么?

C++ 将字符从 int append 到 std::string

c - 将数组传递给函数时使用的正确模式

java - 将父对象分配给子对象而无需在 Java 中进行强制转换

c - 在 C 中将字符追加到字符数组

c - 使用 fgets 获取垃圾读取文件

c - 可用的结构体指针比指定的多吗?

Python:typing.cast 与内置类型转换