首页 > 其他分享 >指针和const修饰符

指针和const修饰符

时间:2024-03-29 22:31:47浏览次数:21  
标签:10 const int 修饰符 地址 20 指针

详解指针(1)

  • 什么是指针
    • 指针类型
      • 指针运算

1 指针
在生活之中,我们每个人的家中都有门牌号,而正因为有了门牌号我们才能够正确而快速的找到自己的家,这个门牌号就相当于我们的地址。而在C语言之中也有这么一种东西----地址,我们可以通过地址找到存储在该内存单元的数据,在C语言中地址也叫指针。
我们可以这么理解 地址=指针=内存单元的编号。
2 指针类型
c语言中的指针类型有

char* arr //字符指针
int* i//整型指针
int* arr[10]//指针数组
int (*arr)[10]//数组指针
int (*arr)(int x,int y)//函数指针
int (*arr)[x]() //函数指针数组

2.1 指针类型的意义
指针类型的大小都是一样的,在x86或者x64的环境中分别为4、8个字节,而指向类型的不同则决定了指针的操作空间的大小,如果你用char则意味着你只能操作一个字节若是int则能够操作四个字节,代码如下
字符指针

#include <stdio.h>
int main()
{
int n = 0x11223344;
char *pc = (char *)&n;
*pc = 0;
return 0;
}

整型指针

#include <stdio.h>
int main()
{
int n = 0x11223344;
int *pi = &n;
*pi = 0;
return 0;
}

也就是说虽然空间大小相同,但能调用的范围却并不相同也可以理解成操作的权限并不相同。

3 指针运算
指针既然存放的地址,那么指针-指针是什么呢,接下来我将为大家讲解指针减指针的结果
如图所示,上图中的00000A为十六进制数字,转为十进制则为10,而这则恰好为a与a+10之间元素的个数
在这里插入图片描述
如图所示
3.1 指针加减整数
在这里插入图片描述由图中我们可以看出char*+1只移动了一个字节,而int*+1移动了四个字节,所以指针的类型决定了指针一步走了多大。

4.const修饰符
const修饰符是指将其修饰的数据变成常量,从而起到不能修改保护数据的作用。那么它与指针结合又意味着什么呢?
用const修饰指针分别有以下几种情况

int* const p
const int* p
const int* const p

而这三种也有不同的含义
首先是const int* p意味着不能修改p的值但能改变地址

void test()
{
	int n = 10;
	int m = 20;
	const int* p = &n;
	*p = 20;//**报错 表达式必须是可修改的左值**
	p = &m; 
}

int* const p 不能修改地址但能修改它的值

void test1()
{
	int n = 10;
	int m = 20;
	int* const p = &n;
	p = &m;//**报错 表达式必须是可修改的左值**
	*p = 20; 
}

const int* const p 则是既不能修改地址也不能修改值

void test4()
{
	int n = 10;
	int m = 20;
	int const* const p = &n;
	*p = 20; //**报错 表达式必须是可修改的左值**
	p = &m; //**报错 表达式必须是可修改的左值**
}

本篇介绍到此结束 如果对您有所帮助的话可以一键三连哦 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

标签:10,const,int,修饰符,地址,20,指针
From: https://blog.csdn.net/2301_80103660/article/details/136724888

相关文章

  • 使用函数指针实现转移表
    用函数指针实现简单的计算器功能。使用函数指针模拟实现计算器的功能大大减少了代码量,只需要创建一个函数指针数组,zi’azia其中存放着四钟加减乘除的算法。代码如下#include<stdio.h>intadd(inta,intb){ returna+b;}intsub(inta,intb){ returna-b;......
  • UE4 C++ Widget的NativeConstruct 与 NativePreConstruct
    构造函数由于Widget是由UE的反射系统创建的,其生命周期由UE引擎管理,所以并不存在构造函数,UE为Widget类定义了两个虚函数NativeConstruct与NativePreConstruct来充当构造函数的作用。而这两个函数的调用都必须在Widget被实例化之后才能进行调用如何在Widget中获取角色在蓝图节......
  • Item2:用consts,enums和inlines取代#defines
    芝士wa2024.3.29Item2链接“用compiler(编译器)取代preprocessor(预处理器)”,问题就在于因为#define不被视为语言的一部分要理解这句话,需要先了解C++程序的编译过程:1.预处理preprocess预处理是编译前的准备工作。在这一步中,预处理器会执行以下操作:替换所有的宏定义(#defin......
  • Vue:实现子组件和父组件数据的双向绑定案例和sync修饰符简化
    实现子组件和父组件数据的双向绑定(实现App.vue中的selectId和子组件选中的数据进行双向绑定)代码案例BaseSelect.vue<template><div><select:value="selectId"@change="selectCity"><optionvalue="101">北京</option><op......
  • Java 多态、包、final、权限修饰符、静态代码块
    多态Java多态是指一个对象可以具有多种形态。它是面向对象编程的一个重要特性,允许子类对象可以被当作父类对象使用。多态的实现主要依赖于继承、接口和方法重写。在Java中,多态的实现主要通过以下两种方式:继承:子类继承父类的属性和方法,可以对方法进行重写(覆盖),从而实现不同的......
  • Class with pointer member(s) -> 带指针的类
    Classwithpointermember(s)->带指针的类String字符串为讲解对象设计一个Class先设计头文件示例代码:#pragmaonce​//防卫式声明#ifndef__STRING__#define__STRING__​#include<string.h>​//头文件定义classString{public://设计构造函数->这里只是定义了......
  • 19、C++的指针基础
    1、指针的基本概念(1)变量的地址变量是内存变量的简称,在C++中,每定义一个变量,系统就会给变量分配一块内存,内存是有地址的。C++用运算符&获取变量在内存中的起始地址。语法:&变量名(2)指针变量指针变量简称指针,它是一种特殊的变量,专用于存放变量在内存中的起始地址。语法:数据......
  • 在C语言中,可以通过指针来修改它所指向的内存位置的内容
    在C语言中,可以通过指针来修改它所指向的内存位置的内容。下面是一个例子:#include<stdio.h>intmain(){inta=10;//定义一个变量a,并初始化为10int*p=&a;//定义一个指针p,让它指向a的地址*p=20;//通过指针p修改它所指向的内存位置(即变量......
  • 【项目实战】记一次因单元测试注解@BeforeEach 和@Before错误使用导致的空指针异常
    一、错误说明在项目开发过程中,我们可能会遇到因单元测试注解@BeforeEach和@Before错误使用导致的空指针异常。在使用JUnit5框架时,错误地使用了@Before注解,导致在每个测试方法执行前没有正确初始化对象,从而引发空指针异常。二、报错内容为了解决这个问题,需要了解这两个注......
  • Linux C++ 007-指针
    LinuxC++007-指针本节关键字:Linux、C++、指针、函数指针相关库函数:基本概念指针的作用:可以通过指针间接访问内存。内存编号是从0开始记录的,一般用于十六进制数字表示,可以利用指针变量保存地址。定义和使用指针变量定义语法:数据类型*变量名;指针所占内存空间,指针......