首页 > 其他分享 >指针的运算

指针的运算

时间:2024-07-14 16:59:44浏览次数:17  
标签:sz arr 运算 int 整数 指针

目录

开头

大家好,我叫这是我58。今天,我们来介绍一下指针的运算和与之相关的一些东西。

1.什么是指针的运算?

总结

指针的运算,有这三种,分别是“指针 ± \pm ±整数”“指针 − - −指针”和指针的关系运算。

指针 ± \pm ±整数

在“指针 ± \pm ±整数”的运算中,返回值见下面的表格。

运算符整数类型返回值
+ + +正整数指针从中间往右数第整数位的地址
+ + +负整数指针从中间往左数第 ∣ | ∣整数 ∣ | ∣位的地址
− - −正整数指针从中间往左数第整数位的地址
− - −负整数指针从中间往右数第 ∣ | ∣整数 ∣ | ∣位的地址

其中,如果指针 ± 0 \pm0 ±0,就只返回指针的地址,这与数学中的公式 a ± 0 = a a\pm0=a a±0=a(这里的a代指针)是一模一样的,而这时候,就有问题出现了。

这是我58,为什么在0x0000000000000000的字符型指针减上1之后就返回0xFFFFFFFFFFFFFFFF呢?


其实啊,如果看着这上面的图片,就知道为什么在0x0000000000000000的字符型指针的字符型指针减上1之后就返回0xFFFFFFFFFFFFFFFF了,因为在这张图片中的“内存”中,如果假设字符型指针的地址为0x0000000000000000,那么而这个指针从中间往左数的第一位地址为0xFFFFFFFFFFFFFFFF,所以,这就是在0x0000000000000000的字符型指针减上1之后就返回0xFFFFFFFFFFFFFFFF的原因。

指针 − - −指针

在“指针 − - −指针”的运算中,返回这两个指针之间的元素个数,并且,如果这两个指针没有指向同一块空间(比如数组),就会使这个运算出现错误。掌握起来特别简单。

指针的关系运算

p >= arr或者p >= pa(ppaarr是一个指针)中,就是指针的关系运算,主要的作用就是用来判断指针与指针的关系。这个不必多讲。

2.指针的运算的实际运用

模拟strlen函数

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int Strlen(char* str) {
	char* p = str;
	while ('\0' != *p) {
		p++;
	}
	return p - str;
}
int main() {
	char str[] = "Hello,world!!!";
	printf("%d", Strlen(str));
	return 0;
}

数组全部初始化为0

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
void init(int* arr,int sz) {
	int* p = arr + sz - 1;
	int* pa = arr;
	for (; pa <= p;) {
		*pa++ = 0;
	}
}
int main() {
	int arr[9] = { 1,2,3,4,5,6,7,8,9 };
	int sz = sizeof arr / sizeof arr[0];
	int i = 0;
	init(arr,sz);
	for (i = 0; i < sz; i++) {
		printf("%d ", arr[i]);
	}
	return 0;
}

逆序输出数组

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
void reprint(int* arr,int sz) {
	int* p = arr + sz - 1;
	for (; p >= arr; p--) {
		printf("%d ", *p);
	}
}
int main() {
	int arr[9] = { 1,2,3,4,5,6,7,8,9 };
	int sz = sizeof arr / sizeof arr[0];
	int i = 0;
	reprint(arr, sz);
	return 0;
}

……

结尾

在你看到这之后,可以评论来互动一下我吗?

标签:sz,arr,运算,int,整数,指针
From: https://blog.csdn.net/qq_69383179/article/details/140413591

相关文章

  • C语言 底层逻辑详细阐述指针(一)万字讲解 #指针是什么? #指针和指针类型 #指针的解引用 #
    文章目录前言序1:什么是内存?序2:地址是怎么产生的?一、指针是什么1、指针变量的创建及其意义:2、指针变量的大小二、指针的解引用 三、指针类型存在的意义四、野指针1、什么是野指针2、野指针的成因a、指针未初始化b、指针越界访问c、指针指向的空间释放3、如何......
  • C++ PImpl模式、指向实现的指针、PImpl Idiom、隐藏实现细节
    C++PImpl模式、指向实现的指针、PImplIdiom、隐藏实现细节flyfishPImpl全称是“PointertoImplementation”,在中文中通常翻译为“指向实现的指针”或者“指向实现”。PImpl是一种编程技巧,通常用于C++中,通过这种技术,可以隐藏类的实现细节,达到信息隐藏和二进制兼容......
  • 【python基础】常见的运算符
    一、常见的逻辑运算符1、逻辑“与”运算符---andand对符号两侧的值进行与运算,只有两侧均为True时候最终结果才为True,与运算主要找False,如果第一个值为False,则不在运算第二个值>>>print(0and1)0>>>aa=1andprint('23')23>>>aa=0andprint('23')>>>>>>......
  • 运算符重载
    运算符重载是什么:重新赋予运算符新含义,添加参数或创建,允许在程序中定义或修改运算符的行为类似函数一样。重载位置:在类中写相当于举例:要实现两个向量相加structVector2{ floatx,y; Vector2(floatx,floaty)//初始化结构体变量 :x(x),y(y) { } Vector2Add(cons......
  • C++ //练习 14.44 编写一个简单的桌面计算器使其能处理二元运算。
    C++Primer(第5版)练习14.44练习14.44编写一个简单的桌面计算器使其能处理二元运算。环境:LinuxUbuntu(云服务器)工具:vim 代码块/************************************************************************* >FileName:ex14.44.cpp >Author: >Mail: >C......
  • 05day--C++日期类的实现与取地址运算符的重载
    这里写目录标题5.3⽇期类实现6.取地址运算符重载6.1const成员函数6.2取地址运算符重载5.3⽇期类实现Date.h#pragmaonce#include<iostream>usingnamespacestd;#include<assert.h>classDate{//友元函数声明friendostream&operator<<(ostream&......
  • 运算符的关系,什么叫一元运算符,二元运算符,三元运算符,运算符优先级,以及运算符的
    按照操作数个数区分:一元运算符:一元运算符只需要一个操作数。常见的一元运算符有:1.递增和递减运算符:++和--,用于对操作数进行增加或减少1。2.正负号运算符:+和-,用于表示正负数。3.逻辑非运算符:!,用于对布尔值进行取反。二元运算符:二元运算符需要两个操作数。常见的二元运......
  • 【C++编程】数组、函数、结构体、指针、类
    数组:存储一个固定大小的相同类型元素的顺序集合声明、初始化:typearrayName[size0][size1]...={{value00,value01,...},{value10,value11,...},...};intmy_array[2][3]={{1,2,3},{4,5,6}};访问数组元素:arrayName[index0][index1]...;intget_eleme......
  • 三元运算符 栈 堆 隐式转换 笔记
    是什么:相当于if语句的语法糖代码示例:std::stringrank=level>10?"Master":"Begining";判断条件?为真保留:为假保留;可以嵌套使用,最好别用看的头疼;栈通常非常小通常为1兆2兆;浅要提及堆上飞陪比栈花费更多时间,而且要手动释放内存若对象太大或要显式地控制对象的生存期,就在堆......
  • C++中的可见性 指针 笔记
    含义:谁能看到他们谁能调用?谁能使用?可见性的修饰符:private含义:只有其所在的类可以访问,被修饰的变量但是friend关键字可以让类或者函数成为朋友(友元)可以在别处访问私有成员protected含义:所在的类和层次结构中的所有子类可以访问这些符号例子:classprintable{prot......