1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > c语言数组及其下标引用 C语言之数组下标引用与间接引用

c语言数组及其下标引用 C语言之数组下标引用与间接引用

时间:2023-04-10 05:58:09

相关推荐

c语言数组及其下标引用 C语言之数组下标引用与间接引用

数组元素的访问方式有下标引用和间接访问两种.

除了优先级之外, 下标引用和间接访问完全相同. arrayname[subscript] = *(arrayname + (subscript))

例如:

int arrayname[10];

int *arrayptr = arrayname + 2;

arrayptr = arrayname+2 = &arrayname[2]

*arrayptr = arrayname[2] = *(arrayname+2)

arrayptr[0] = *(arrayptr+(0)) = arrayname[2] = *(arrayname+2)

arrayptr+6 = arrayname+8 = &arrayname[8]

*arrayptr+6 = *(arrayname+8)+6 = arrayname[2]+6

*(arrayptr+6) = *(arrayname+8) = arrayname[8]

arrayptr[6] = *(arrayptr+(6)) = *(arrayname+8) = arrayname[8]

arrayptr[-1] = *(arrayptr+(-1)) = *(arrayname+1) = arrayname[1]

2[arrayname] = *(2+(arrayname)) = *(arrayname+2) = arrayname[2]

如果可以互换的使用下标引用和间接(指针)引用, 那么应该选择哪一个呢?

通常考虑以下方面:

1. 下标访问更容易理解, 可读性更高.

2. 下标引用不会比指针引用更有效率, 但是有时指针会比下标更有效率.

考虑下面的循环:

// 使用下标

int arrayname[10], index;

for(index = 0; index < 10; index++)

arrayname[index]= 0;

在每次循环中, 程序获取index的值并于 sizeof(int) 相乘(因为数组指针的移动的间隔是sizeof(int)个内存单元). 这个乘法需要花费一定的时间和空间.

// 使用指针

int arrayname[10], *arrayptr;

for(arrayptr = arrayname; arrayptr < arrayname + 10; arrayptr++)

*arrayptr = 0;

上述代码中仍然存在乘法运算, 即 arrayptr++ 中, 1 * sizeof(int) 后与arrayptr相加. 但是注意到每次乘法都是 1 * sizeof(int) 所以编译器在编译时执行一次乘法后程序运行时就不再需要执行乘法, 程序中包含了数组指针与 1 * sizeof(int) 结果相加的指令.

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。