指针
一:求数组元素之和
#include <stdio.h> #define size 10 int exchange(int *start,int *end); int main(void) { int a[size]={1,2,3,4,5,6,7,8,9,10}; long answer;
answer=sump(a,a+size); printf("the total number of a is %d.\n",answer); return 0;
}
/* 使用指针算法*/
int sump(int *start,int *end)
{
int total=0;while(start<end) { total +=*start;//把数组元素的值加起来 start++;//让指针指向下一个元素 } return total;
}
几个重要的点:
-
指针start开始指向a数组的首元素
-
下式表示把首元素加给total
total +=*start;
-
下式表示指向数组的下一个元素
start++;
-
因为下标从0开始所以 ‘a+size’ 指向数组末尾的下一个位置
answer=sump(a,a+size);
二:指针操作
#include <stdio.h> int main(void) { int urn[5]={100,200,300,400,500}; int *ptr1,*ptr2,*ptr3;
ptr1=urn;//把urn数组的首地址赋给了ptr1 ptr2=&urn[2];//把urn数组的第三个元素的地址赋给了ptr2 printf("ptr1=%p , *ptr1=%d , &ptr1=%p\n",ptr1,*ptr1,&ptr1);
}
运行结果:
ptr1=000000000062FDF0 , *ptr1=100 , &ptr1=000000000062FDE8
-
指针加法
ptr3=ptr1+4;
printf("ptr1+4=%p , *(ptr1+4)=%d ",ptr1+4,*(ptr1+4));
运行结果:
ptr1+4=000000000062FE00 , *(ptr1+4)=500
可以看出一个指针与整数相加,ptr1+4 与&urn[4] 等价
-
指针递增
ptr1++;
printf("ptr1=%p , *ptr1=%d , &ptr1=%p\n",ptr1,*ptr1,&ptr1);
运行结果:
ptr1=000000000062FDF4 , *ptr1=200 , &ptr1=000000000062FDE8
递增指向数组元素的指针可以让该指针移动至数组的下一个元素
-
一个指针减去另一个指针
printf("ptr2=%p , ptr1=%p , ptr2-ptr1=%td\n",ptr2,ptr1,ptr2-ptr1);
运行结果:
ptr2=000000000062FDF8 , ptr1=000000000062FDF0 , ptr2-ptr1=2
ptr2-ptr1=2 表示这两个指针所指向的两个元素相隔两个int,而不是2个字节
-
一个指针减去一个整数
printf("ptr3=%p , ptr3-2=%p\n",ptr3,ptr3-2);
运行结果:
ptr3=000000000062FE00 , ptr3-2=000000000062FDF8
ptr3-2与&urn[2]等价,因为ptr3指向的是&urn[4]
标签:int,ptr2,ptr3,ptr1,start,指针 From: https://www.cnblogs.com/ninnne/p/17107348.html