可以在地址上执行的操作:
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 = # 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 = # 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