通過指針遍歷數組累加,鞏固指針算術與數組名退化為指針概念。
#include <stdio.h>
int main() {
int a[101]; // 索引 1..100 使用,0 位置閒置
int sum = 0;
int *p;
// 初始化數組
for (int i = 1; i <= 100; i++) {
a[i] = i;
}
// 指針遍歷累加
for (p = &a[1]; p <= &a[100]; p++) {
sum += *p;
}
printf("1+2+...+100 = %d\n", sum); // 5050
return 0;
}
| 代碼 | 含義 |
|---|---|
int *p; | 聲明指向 int 的指針 |
p = &a[1]; | 指向數組首個有效元素 |
p <= &a[100] | 指針比較:地址遞增直到尾元素 |
p++ | 指針算術:地址增加 sizeof(int) 字節 |
*p | 解引用:獲取指針指向的值 |
int sum = 0;
for (int *p = (int*)malloc(100*sizeof(int)), *end = p+100, i=1; p < end; p++, i++) {
*p = i;
sum += *p;
}
free(p - 100);
或直接累加,無需存儲:
int sum = 0;
for (int i = 1; i <= 100; i++) sum += i;
// 或高斯公式:sum = 100 * 101 / 2;
for (p = a; p < a+100; p++) 配合 int a[100] (0-based) 更標準