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)
这是一个普通的整体补充.再次,它与上述内容的联系方式尚不清楚.
最后,您的问题标题为"常量指针数组或指向数组的指针",而在问题的实际文本中,我看不到.