指针用作数组处理
- #define N 10
- int a[N], sum, *p;
- ....
- sum = 0;
- for(p = &a[0]; p < &a[N]; p++)
- sum += *p;
用数组名作为指针
可以用数组的名字作为指向数组第一个元素的指针
int a[10]
用a作为指向数组的第一个元素的指针, 可以修改a[0]
*a = 7;
可以通过指针a + 1来修改a[1]
*(a + 1) = 12;
通常情况下,
a + i 等同于 &a[i](两者都表示指向数组a中元素i的指针),并且*(a + i)等价于a[i]
(两者都表示元素i本身), 也就是 可以把数组的取下标操作看成是指针算术运算的一种形式
for(p = &a[0]; p < &a[N]; p++)
sum += *p;
- 为了简化这个循环,可以用a替代&a[0], 同时用a + N代替&a[N]
for(p = a; p < a +N; p++)
sum += *p;
例子:
1. 逆向打印输入字符程序
(
指针用作数组处理
)
#include <stdio.h>
#define MSG_LEN 80 /* maximum length of message */
int main(void)
{
char msg[MSG_LEN], *p;
printf("Enter a message: ");
for (p = &msg[0]; p < &msg[MSG_LEN]; p++) {
*p = getchar();
if (*p == '\n')
break;
}
printf("Reversal is: ");
for (p--; p >= &msg[0]; p--)
putchar(*p);
putchar('\n');
return 0;
}
#define MSG_LEN 80 /* maximum length of message */
int main(void)
{
char msg[MSG_LEN], *p;
printf("Enter a message: ");
for (p = &msg[0]; p < &msg[MSG_LEN]; p++) {
*p = getchar();
if (*p == '\n')
break;
}
printf("Reversal is: ");
for (p--; p >= &msg[0]; p--)
putchar(*p);
putchar('\n');
return 0;
}
2.
逆向打印输入字符程序
(
数组名用作指针
)
#include <stdio.h>
#define MSG_LEN 80 /* maximum length of message */
int main(void)
{
char msg[MSG_LEN], *p;
printf("Enter a message: ");
for (p = msg; p < msg + MSG_LEN; p++) {
*p = getchar();
if (*p == '\n')
break;
}
printf("Reversal is: ");
for (p--; p >= msg; p--)
putchar(*p);
putchar('\n');
return 0;
}
#define MSG_LEN 80 /* maximum length of message */
int main(void)
{
char msg[MSG_LEN], *p;
printf("Enter a message: ");
for (p = msg; p < msg + MSG_LEN; p++) {
*p = getchar();
if (*p == '\n')
break;
}
printf("Reversal is: ");
for (p--; p >= msg; p--)
putchar(*p);
putchar('\n');
return 0;
}