我有一个1D数组已被动态分配,我想指向一个双指针(** ptr),然后将ptr当作一个二维数组,但为此,应该设置二维数组的宽度,有没有办法做到这一点。例如,如果我有一个尺寸为80的阵列,我想将其视为一个8 * 10的2D阵列,这样((ptr)+1)将移动10个单位。我知道我可以手动使用它作为arr [i row + j],但我宁愿以另一种方式做它。谢谢你的帮助!!!如何在c中设置指针的宽度?
0
A
回答
3
重新解释一个一维数组作为使用指针二维数组:
Type a[80];
Type (*b)[10] = (Type (*)[10])a;//or simply (void*)a. b is pointer to Type[10]
使用b[i][j]
注: 双指针(等作为**ptr
)基本上是错误。通常,该数组不是指针数组。
另外int col = 10; Type (*b)[col] = (Type (*)[col])a;
作为VLA(可变长度阵列)自C99(c11的选项)以来可能。
+0
[DEMO](http://ideone.com/w2Lrcm) – BLUEPIXY
1
除了TYPE*
对象之外,您从不指向TYPE**
。您没有任何TYPE*
对象。一组TYPE
不是其中之一。除了之外,您还可以分配TYPE*
的数组,并且将前者的每个元素排列为指向后者的相关元素。
TYPE* elements = malloc (N_rows * N_cols * sizeof(TYPE));
TYPE** rows = malloc (N_rows * sizeof(TYPE*));
for (i = 0; i < N_rows; ++i)
rows[i] = elements + N_cols * i;
然而,这是非常低效和不方便的。如果其中一个维度是编译时常量,或者您可以使用VLA,则可以在不使用任何双引用的情况下执行此操作(详细信息请参阅其他答案,以便我不再重复)。
相关问题
- 1. 如何在c#中设置宽度和高度位图?
- 2. 如何设置ExpandableListView的指标图标的宽度和高度?
- 3. C++设置空指针?
- 4. 如何设置QWidget宽度?
- 5. 如何设置BarChartDataSet宽度
- 6. 如何设置宽度H:selectOneRadio
- 7. 如何设置datagridview中列的宽度
- 8. 如何设置jqModal的高度宽度?
- 9. 如何为iPhone SDK中的速度计指针设置动画?
- 10. 如何设置元素的宽度等于设备宽度?
- 11. 如何在C中将结构指针设置为NULL?
- 12. 如何将指针设置为C#中Datagridview中的当前行
- 13. 如何在C#中使用MeasureString来设置表列宽度?
- 14. 如何在C#中使用EPPlus设置xlsx单元格宽度
- 15. 如何在保留宽高比的情况下在回形针中设置最大宽度或高度
- 16. 如何在AS3中设置我的swf的宽度和高度?
- 17. 需要在我的printf转换规范上设置字段宽度的指针
- 18. jQuery - 如何设置宽度在增加?
- 19. 如何设置宽度为100%,在WPF
- 20. 如何在seaborn barplot上设置宽度
- 21. 如何设置ostream的指数字段的宽度?
- 22. 无法将指针位置设置为C++中另一个指针位置的指针位置
- 23. 如何在knitr中设置图的宽度/高度?
- 24. 在Android中,如何设置ListView项目的高度和宽度?
- 25. 如何在java代码中设置Mapview的宽度和高度?
- 26. 如何在HTML表格中设置Tbody的宽度和高度
- 27. 如何在HTML中将div的宽度/高度设置为100%
- 28. 如何在fabricjs中设置svg的宽度和高度?
- 29. 如何查找滑块的大拇指以设置其宽度
- 30. D3 Sunburst。如何设置不同的戒指\等级宽度
'输入a [80];类型(* b)[10] =(类型(*)[10])a;'使用'b [i] [j]'。 – BLUEPIXY
我可以使用col等变量替换10吗? (感谢答案btw)。 –
在这个问题中,术语'宽度'和'双'是不明确的。在C语言环境中,它们通常被理解为具有不同于此处所设想的含义。在这个问题中你可能很清楚你的意思,但标题本身就是误导。 – Clifford