C语言使用指针遍历数组:*(array+i)含义及循环影响咨询
数组与指针相关问题解答
1. *(array+i) 代表什么?
- 数组名
array在大多数表达式场景中(比如这里的array+i),会被自动转换为指向数组第一个元素的指针,等价于&array[0]。 array+i是指针算术运算:由于array是指向int类型的指针,i是整数,C语言会自动计算出指向数组第i个元素的指针(数组下标从0开始)。例如i=2时,array+2就指向array[2]的内存地址。*(array+i)是对这个指针做解引用操作,最终得到该指针指向的数组元素的值,它和array[i]是完全等价的——C语言的下标访问array[i]本质就是*(array+i)的语法糖。
2. 它是在创建指针吗?
不是。array+i只是在表达式计算过程中生成一个临时的指针值,并没有在内存中创建新的指针变量。整个*(array+i)最终返回的是数组元素的int类型值,不会额外占用内存存储指针。
3. 对for循环有什么影响?
在你提供的代码里,*(array+i)和array[i]的作用完全相同,都是获取数组第i个元素的值。这个for循环的逻辑就是从i=0到i=9遍历数组所有元素并打印,换成array[i]作为printf的参数,输出结果完全一致。
这种写法只是用指针算术替代了下标访问,对循环的执行逻辑和效率没有本质影响——现代编译器通常会把两种写法优化成完全相同的机器码。
附你提供的代码:
int main() { int array[10] = {0, 1, 8, 2, 18, 3, 6, 2, 2, -4}; int i; for (i = 0; i < 10; i++) printf( "array[%d] = %d\n", i, *(array+i) ); return 0; }
内容的提问来源于stack exchange,提问作者vivi2003
相关产品推荐
相关产品推荐

