首页 > 其他分享 >指针

指针

时间:2023-02-09 22:23:55浏览次数:35  
标签:int ptr2 ptr3 ptr1 start 指针

指针

一:求数组元素之和

#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]

标签:int,ptr2,ptr3,ptr1,start,指针
From: https://www.cnblogs.com/ninnne/p/17107348.html

相关文章

  • java8 lambda 求list最大值、最小值、平均值、求和、中位数、属性排序(空指针异常,空值
    java8lambda求list最大值、最小值、平均值、求和、中位数、属性排序(空指针异常,空值排前、排后)、去重importorg.junit.Test;importjava.text.SimpleDateFormat;im......
  • 4.3 简单的指针
    指针也是一种变量,它所表示的不是数据的值,而是存储着数据的内存的地址。通过使用指针,就可以对任意指定地址的数据进行读写。虽然前面所提到的假想内存IC中仅有10位地址信号,......
  • 【LeetCode】三数之和+四数之和(双指针)
    之所以放在一起是因为,"四数之和"的解题方法基本与"三数之和"一致由此我们可以推出n数之和的解法本质上,我们只是使用双指针的方法降低此类问题的时间复杂度当然用哈希法......
  • 指针
    go语言中不存在指针操作,只需记住两个符号&:取地址*:根据地址取值简单的指针应用packagemainimport"fmt"funcmain(){a:=18//根据值取指针fmt.Pr......
  • C语言填空 :利用指针 三个数按从小到排序
    #include<stdio.h>//将任意三个整数按从小到大排序voidswap(【1】,【2】){inttemp;temp=*pa;*pa=*pb;*pb=temp;}main(){inta,b,c,t......
  • 一些c语言题和数组指针
    自学C语言第一题:念数字重点的几个步骤:如何分离一个数intmask=1; intt=a;//为了不改变a的大小,因为a还要参与后续的运算 while(t>9){ t/=10; mask*=10;}/......
  • 【经典算法】双指针(尺取法):爱,是双向奔赴,还是你追我赶?
    一、前言双指针法又称尺取法,顾名思义,在区间操作时,使用两个指针同时遍历区间,从而实现高效操作。两个指针,就像是一男一女,他们遍历区间的过程,又何尝不像是一对男女彼此追求爱......
  • CF #727(div2)D. PriceFixed, 贪心,双指针
    problemD.PriceFixedtimelimitpertest1secondmemorylimitpertest256megabytesinputstandardinputoutputstandardoutputLenaisthemosteconomicalgirli......
  • C++中的共享指针以及循环引用
    C++中shared_ptr对象之间可以共享对象的拥有权,但是这种共享的对象引用在某些情况下可能会引发一些问题。例如,循环引用会造成两个对象之间相互引用,无法删除对象。一个循环......
  • C++ Day14 借助智能指针实现文本查询查询
    一、设计思路数据结构:1、读取文件时,要记住文件的每一行,并且要将每一行分解为独立的单词vector<string>vec;istringstream2、输出时提供每个单词与其关联的行号,且......