ProDeveloperTutorial.com

教程和编程解决方案
菜单
  • Shell脚本
  • 系统设计
  • Linux系统编程
  • 4g LTE
  • 编码问题
  • C
  • C ++
  • DSA
  • GIT

高级C指针编程第2章:指针算术

前开发者教程 2020年8月3日

可以在地址上执行的操作:

WKT指针变量将保存另一个变量的地址。

即

int a = 10;
int * ptr = NULL;
ptr = &a;

现在,

如果您打印“ptr”,它将打印存储在其中的值。即变量a的地址。
如果您打印“*ptr”,它将打印地址中存在的值。即变量a的值。
如果您打印“&ptr”,它将打印指针变量的地址“ptr”

因此,在“地址”上,我们只能执行“减”,“增”和“减”。所有其他操作均无效。

有效操作:

ptr2 - ptr1
ptr1 ++
ptr1 --

无效的操作:

ptr2 * ptr1
ptr2 + ptr1
ptr2 / ptr1

我们还知道以下运算符:

*			Used to declare a pointer

*			Used to dereference a pointer

->			Used to access fields of a structure referenced by a pointer

(data type)	Used to change the type of pointer.

我们将通过一系列示例来更深入地了解。

 

可以对值执行的操作:

在值上,我们可以执行减法,加法,乘法,增量,减量,除法。

有效操作:

* ptr2 - * ptr1
*ptr1 ++
*ptr1 --
*ptr2 * * ptr1
*ptr2 + * ptr1
(*ptr2) / (*ptr1)

 

在分割时,重要的是要包括内部花括号。因为,如果您编写* ptr2 / * ptr1,“/* ptr1” “/*”是多行注释语法的开始,编译器将给出错误。

现在,让我们通过一系列示例来了解指针算法。

在C中增加一个指针

您可以如下所示增加指针:

ptr++

or

ptr = ptr + 1;

那么,当您增加一个指针时会发生什么呢?

当你做PTR++, it will move to the next block of the size of pointer variable.

即 new_address =当前地址+(i * size_of(数据类型))

例:

如果假设ptr = 2000;即如果“ptr”持有地址2000,并且是类型为int的指针,当您执行ptr ++时,它将向前移动4个字节,现在ptr将指向“2004”.

示例1:检查新指针将移动多少块的简单示例:

#include<stdio.h>  
int main ()  
{  
    int num = 50;

    int * ptr = &num;

    printf("The address hold by ptr = %u\n", ptr );

    ptr++;
    printf("The new address hold by ptr = %u\n", ptr );

    return 0;
}

输出:

The address hold by ptr = 3819903544
The new address hold by ptr = 3819903548

如您在上面的示例中看到的那样,指针跳了4个字节,即整数变量的大小。

示例2:使用数组作为示例的指针递增:

#include<stdio.h>  
int main ()  
{  
    int arr[5] = {1, 2, 3, 4, 5};

    int * ptr = arr;

    int i = 0;

    printf("The array elements are : \n");

    for ( i = 0; i < 5; ++i)
    {
        printf("The address is = %u value is = %d \n", ptr, * ptr );
        ptr++;
    }


    return 0;
}

 

输出:

The array elements are : 
The address is = 3859409440 value is = 1
The address is = 3859409444 value is = 2
The address is = 3859409448 value is = 3
The address is = 3859409452 value is = 4
The address is = 3859409456 value is = 5

 

减少/减去C中的指针

您可以减少指针,如下所示:

ptr--

or

ptr = ptr - 1;

那么,当指针递减时会发生什么呢?

当你做PTR–,它将移回指针变量大小的下一个块。

即 new_address =当前地址–(i * size_of(data_type))

例:

如果假设ptr = 2000;即如果“ptr”当您执行ptr时,它持有地址2000,并且是类型为int的指针–,它将向后移4个字节,现在ptr将指向“1996”.

示例1:检查指针减少时新指针将移动多少块的简单示例。

#include<stdio.h>  
int main ()  
{  
    int num = 50;

    int * ptr = &num;

    printf("The address hold by ptr = %u\n", ptr );

    ptr--;
    printf("The new address hold by ptr = %u\n", ptr );

    return 0;
}  

输出:

The address hold by ptr = 3798407736
The new address hold by ptr = 3798407732

 

示例2:使用数组作为示例的指针减量:

#include<stdio.h>  
int main ()  
{  
    int arr[5] = {1, 2, 3, 4, 5};

    int * ptr = &arr[4];

    int i = 0;

    printf("The array elements are : \n");

    for ( i = 0; i < 5; i++)
    {
        printf("The address is = %u value is = %d \n", ptr, * ptr );
        ptr--;
    }


    return 0;
}  

 

输出:

The array elements are :
The address is = 3844827696 value is = 5
The address is = 3844827692 value is = 4
The address is = 3844827688 value is = 3
The address is = 3844827684 value is = 2
The address is = 3844827680 value is = 1

 

 

 

 

分享
电子邮件
鸣叫
领英
Reddit
绊倒
Pinterest的
上一篇文章
下一篇

关于作者

前开发者教程

每天我们都会讨论竞争性编程问题,请加入我们的网站:   电报频道

ProDeveloperTutorial.com

教程和编程解决方案
版权© 2020 ProDeveloperTutorial.com
从以下课程获得热门课程: 教育性的




      <mark class="oXhEoj5"><bdi id="hlfN18h" class="h4VGQSA"><var id="vXW3YXe" class="vjToKFw"><textarea id="eE4ifua" class="eSpZHGd"></textarea></var></bdi></mark>
    • <figcaption id="uGvYemO"><abbr id="pH2YCpN" class="p3b8cse"><th id="EFBPjsU" class="ExwzeUa"></th></abbr></figcaption>


      <ins class="ZCq1Lk7"></ins>

      1. <area class="nE9AS3A"><abbr class="qF7dUSb"></abbr></area>