C程序设计语言——八、指针(2)指针和一维数组
目录
1、数组的指针
2、指向数组的指针变量
3、数组元素的地址
4、表示数组元素
5、地址:p++(下移一个元素)
6、数值:*(p++)
7、指向数组的指针运算规则
8、等价关系
拜拜~
一、指向一维数组的指针
1、数组的指针
- 数组名是数组的首地址,是一个指针常量
2、指向数组的指针变量
- int a[10],*p; p=a;
- C规定:数组名a是数组的首地址,a+1代表下一个元素地址即 &a[1],a+i代表,&a[i]
3、数组元素的地址
- &a[i]、a+i、p+i
- p++
4、表示数组元素
- a[i]、*(a+i)、*(p+i)、p[i]
- *p++
5、地址:p++(下移一个元素)
6、数值:*(p++)
7、指向数组的指针运算规则
-
p+n:向后移n个元素(不是n个字节);
-
p-n:向前移动n个元素;
-
int *p=&a[1],*q=&a[5];q-p就是4,p-q无意义。必须指向相同数组的指针减法;
-
关系运算:p<q,p是低地址,q是高地址
-
指针可以与0比较:#define NULL 0 int *p = NULL;
-
注意:
-
数组名是地址常量,切不可对其赋值,也不可做自增、自减运算,但是可以进行a+n;
-
8、等价关系
(1) | 含义 | (2) | 含义 |
*p++ | 先取内容,p再++ | *(p++) | 先取内容,p再++ |
(*p)++ | 先取内容,内容再++ | a++(int a,*p=&a) | 内容++ |
*(p--) | 先取内容,p再-- | a[i--] | 先取内容,下标再-- |
*(++p) | p先下移,再取内容 | a[++i] | 下标先++,再取内容 |
*(--p) | p先上移,再取内容 | a[--i] | 下标先--,再取内容 |
二、《编写函数swap(),将数组逆序输出》
//编写函数swap(),将数组逆序输出
#include<stdio.h>
void swap(int *arr,int n)
{int t,i;for(i=0;i<n/2;i++){t=arr[i];arr[i]=arr[n-i-1];arr[n-i-1]=t;}
}
void main()
{void swap(int *arr,int n);int a[10]={1,3,5,7,9,11,13,15,17,19};int i;for(i=0;i<10;i++)printf("%d",a[i]);printf("\\n");swap(a,10);for(i=0;i<10;i++)printf("%d",a[i]);printf("\\n");
}