c语言(指针用作数组处理 数组名用作指针)

 
 
指针用作数组处理
  1. #define N 10
  2. int a[N], sum, *p;
  3. ....
  4. sum = 0;
  5. for(p = &a[0]; p < &a[N]; p++)
    1. 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;
}

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;
}



猜你喜欢

转载自blog.csdn.net/qq_40916995/article/details/80039090