Mar*_*elo 3 c arrays pointers pointer-arithmetic
您好,我现在正在中级C课,这个想法刚出现在我脑海中:
int multi[3][4]; // const multidimensional array
int* ptr = *multi; // ptr is a pointer variable that hold the address of multi const array
Run Code Online (Sandbox Code Playgroud)
那么,访问多维数组位置的更快/更小/优化是什么?
这个:
multi[3][1]; // index the value position
Run Code Online (Sandbox Code Playgroud)
要么
*(*(multi+2)+1); // pointer to the position on the array
Run Code Online (Sandbox Code Playgroud)
或(更新)
ptr += 9; // pointer arithmetic using auxiliary pointer
Run Code Online (Sandbox Code Playgroud)
由于"multi"是一个const数组,编译器应该"知道"元素位置的本地化,如果使用指向该数组的变量指针可能需要更多的处理时间,另一方面在搜索时可能更快我想要显示的项目.什么是更快/更小/优化的方法?
先感谢您.
首先
int multi[3][4];
Run Code Online (Sandbox Code Playgroud)
不是const数组.const这个宣言中没有任何内容.
其次,
int* ptr = *multi;
Run Code Online (Sandbox Code Playgroud)
将ptr指出元素multi[0][0].数字上它与整个地址multi[0]和地址相同multi,但类型不同.
第三,
multi[3][1];
Run Code Online (Sandbox Code Playgroud)
根据定义,它是相同的
*(*(multi + 3) + 1);
Run Code Online (Sandbox Code Playgroud)
所以在性能方面没有任何合理的差异.它与上述内容的联系方式尚不清楚.
第四,
*ptr + 9;
Run Code Online (Sandbox Code Playgroud)
它没有任何"指针算术".它相当于
multi[0][0] + 9;
Run Code Online (Sandbox Code Playgroud)
这是一个普通的整体补充.再次,它与上述内容的联系方式尚不清楚.
最后,您的问题标题为"常量指针数组或指向数组的指针",而在问题的实际文本中,我看不到.
| 归档时间: |
|
| 查看次数: |
1271 次 |
| 最近记录: |