0:指针指向数组的时候,可以进行加一和减一的,这个时候好比钟表的指针,加一分钟,指针往后运行一个
1:指针的算术运算:2:使用指针来处理数组
3:运算符和++运算符结合
4:用数组名作为指针使用
#include <stdio.h>
/*
指针和数组的关系
*/
int main(void){
//1.指针的算术运算
int i=100;
//ip 指针 *ip 表示i变量的别名
int *ip = &i;
printf("i=%d\n",i);
printf("ip=%d\n",*ip);
//注意这里指向的是第一个元素的地址
int a[] ={1,2,3,4,5};
int *ip2 = &a[0];
printf("a[0]=%d\n",a[0]);
printf("*IP2=%d\n",*ip2);
//如果指针执行了数组了
int anew[] = {11,12,13,14,15};
int *newp = &anew[0];
printf("a[0]=%d\n",anew[0]);
printf("*newp=%d\n",*newp);
newp++;
printf("*newp=%d\n",*newp);
newp++;
printf("*newp=%d\n",*newp);
newp--;
printf("*newp=%d\n",*newp);
//两个指针相减,就是数字相减了啊。结果为两个指针之间的距离3 5 之间的个数就是2,就是5-3=2;
int *superp =&anew[0];
superp+=4;
newp--;
int x = superp-newp;
printf("x=%d",x);
//使用指针访问数组:
int g[]={1,88,555,2222};
//之前输出数组的元素是如下的,
int size = sizeof(g)/sizeof(int);
for(int i=0;i<size;i++){
printf("g[%d]=%d\n",i,g[i]);
}
//使用指针,可以这样
int *point;
for(point=&g[0];point<=&g[size];point++){
printf("%d\n",*point);
}
//3: * 和 ++结合
int a3[] = {111,222,333,444,555};
int *p=&a3[0];
while(p<&a3[5]){
printf("%d\n",*p++);//*p++,先执行*p,然后在执行++
}
//4: 数组名作为指针,简单的来说数组指针指向首地址
//数组名称可以标识一个指向该数组第一个元素的指针,说白了就是a=&a[0];其实就可以说数组a的地址就是a
int a4[] ={1,2,3,4,5};
printf("a[0]地址=%d\n",&a[0]);
printf("数组a的地址:%d\n",a);
int *pa =&a[0];
printf("p=%d\n",pa);
/* 结果
a[0]地址=2686592
数组a的地址:2686592
p=2686592
*/
int at[10];
*at=100;//等价于at[0]=100;
*(at+1)=200;//等价于at[1]=200;
printf("a[0]=%d\n",at[0]);
printf("a[1]=%d\n",at[1]);
int aqiu[]={1,2,3,4,5};
int sum = 0;
for(int i=0;i<5;i++){
sum = sum+aqiu[i];
}
printf("sum=%d\n",sum);
sum=0;
int *qiup;
int sizeqiu = sizeof(aqiu)/sizeof(int);
for(qiup=aqiu;qiup<=&aqiu[sizeqiu-1];qiup++){
sum = sum+*qiup;
//printf("sum=%d",sum);
}
printf("sum=%d",sum);
return 0;
}