我有一个像这样声明的2D数组:
int arr[2][2]={ {1,2},{3,4}};
Run Code Online (Sandbox Code Playgroud)
如果我这样做:
int ** ptr=(int**) arr;
Run Code Online (Sandbox Code Playgroud)
和:
cout<<**ptr;
Run Code Online (Sandbox Code Playgroud)
我收到了分段错误(使用g ++ - 4.0).
为什么这样?不应该打印值1(等于arr[0][0])?
您正在尝试将双指针变量分配给数组...这已被详尽介绍,请参阅此处以获取有关此内容的信息。此外,既然你声明
int arr[2][2] = ...;
然后尝试分配arr给双指针
int ** ptr = ... ;
这肯定不起作用,因此会出现分段错误。此外,该语句int ** ptr=(int**) arr;实际上是将一种类型(即 [][])强制转换为另一种类型(即 **),尽管它们的类型是“int”。它们都是不同的,编译器的解释会非常不同......
你可以这样做:
int *ptr = &arr;
现在*(ptr + 1) 将引用第 0 行,*(ptr + 2)将引用第 1 行,依此类推。您唯一的责任是不要超越使用位置的标记arr,否则可能会发生溢出甚至分段错误......
| 归档时间: |
|
| 查看次数: |
1099 次 |
| 最近记录: |