指针

指针

一:求数组元素之和

#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&lt;end)
{
    total +=*start;//把数组元素的值加起来 
    start++;//让指针指向下一个元素 
}
return total;

}

 

几个重要的点:

  1. 指针start开始指向a数组的首元素

  2. 下式表示把首元素加给total

total +=*start;
  1. 下式表示指向数组的下一个元素

start++;
  1. 因为下标从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=&amp;urn[2];//把urn数组的第三个元素的地址赋给了ptr2
printf("ptr1=%p , *ptr1=%d , &amp;ptr1=%p\n",ptr1,*ptr1,&amp;ptr1);

}

运行结果:

ptr1=000000000062FDF0 , *ptr1=100 , &ptr1=000000000062FDE8

 

  1. 指针加法

ptr3=ptr1+4;
printf("ptr1+4=%p , *(ptr1+4)=%d ",ptr1+4,*(ptr1+4));
​

运行结果:

ptr1+4=000000000062FE00 , *(ptr1+4)=500

可以看出一个指针与整数相加,ptr1+4 与&urn[4] 等价

  1. 指针递增

ptr1++;
printf("ptr1=%p , *ptr1=%d , &ptr1=%p\n",ptr1,*ptr1,&ptr1);

运行结果:

ptr1=000000000062FDF4 , *ptr1=200 , &ptr1=000000000062FDE8

递增指向数组元素的指针可以让该指针移动至数组的下一个元素

  1. 一个指针减去另一个指针

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个字节

  1. 一个指针减去一个整数

printf("ptr3=%p , ptr3-2=%p\n",ptr3,ptr3-2);

运行结果:

ptr3=000000000062FE00 , ptr3-2=000000000062FDF8

ptr3-2与&urn[2]等价,因为ptr3指向的是&urn[4]

posted @ 2023-02-09 22:13  Ninnne  阅读(46)  评论(0)    收藏  举报