首页 > 其他分享 >C语言中的存储类型

C语言中的存储类型

时间:2023-12-20 18:13:10浏览次数:25  
标签:存储 变量 数据类型 内存空间 C语言 地址 类型 指针

指针

在内存中定义变量(申请内存空间)存储数据,但是每个存储数据变量都有地址,地址也能找到内存空间,通过地址也可以操作到内存空间的值

image.png

指针:存储地址的变量,就叫做指针,也叫做指针变量

指针也会占用内存空间,但是指针占用内存空间,空间中存储的是地址值

指针就是操作内存地址,使用内存地址

定义指针变量:

指针变量:本质上是一个变量,存储内存地址

格式:

指向数据类型*变量名;

指向数据类型:指针变量存储哪种数据类型的地址;指向哪种数据类型

*:指针变量

指针变量的类型:指向数据类型*

&变量名:变量的地址

&:取地址运算符

注意:如果指针变量存储某个内存地址,则只有这个地址的内存空间被申请之后,才能通过地址进行访问空间

int a;

int * p = &a;

使用指针变量:

指针变量存储:

指针变量 = 地址(内存空间能够使用的地址)

指针变量访问内存空间数据:

指针访问变量:

* 指针变量名

访问指针变量存储的地址对应的内存空间中的数据

int *p;

p = &a;

*p;//访问a中的数据值,使用变量名就是使用变量的值,所以 *p 不是访问p这个指针变量的值,而是p这个指针变量值为地址,访问对应内存地址中的内存空间的值

image.png

指针变量 赋值地址:通过地址,建立指针与内存空间的联系

指针变量使用间接取值符( * ):得到对应空间的数据

对变量取地址时,如果变量有多个字节,则&a,表示取的首地址,地址最小的那个字节地址

野指针:

指针记录(存储)的地址不明确,或非法的内存地址不具有使用操作权限

注意:野指针不要 直接 取 * 操作

int * p;//野指针

空指针:

指针记录的是0x0000 地址,使用 宏 NULL 表示

#define NULL(void *)0x00

系统规定 NULL 地址 不允许访问操作,只要操作就会报错

通常 使用 NULL 表示 该指针变量,现在不可用

int * p = NULL;//空指针

万能指针:

void:表示空类型,不能直接定义变量,因为定义变量也不知道其变量的大小

void * 类型指针变量 表示一个万能指针,可以存储其他任意类型的地址,也可以把void * 类型指针赋值给其他任意类型的指针

void * 类型指针,不能进行除了赋值运算的其他任何指针操作

int * a = &x;

void * b;

b = a;

double * c;

c = b;

2、指针的运算

指针变量的存储大小:

image.png

指针运算:

指针的算数运算:+、- 算数运算

表示指针向前或向后移动地址(移动指针存储的地址)

指针 + 整数n:

地址向增大方向 移动 n个 指向数据类型大小

指针 - 整数n:

地址向减小方向 移动 n 个 指向数据类型大小

指针没有 * 、 / 、% 运算

注意:指针进行算数运算后,类型还是原指向类型

指针++、++指针、指针--、--指针

标签:存储,变量,数据类型,内存空间,C语言,地址,类型,指针
From: https://www.cnblogs.com/tangxiyue/p/17917169.html

相关文章

  • docker存储与网络
    1.配置容器端口映射我们使用容器,不单是运行单机程序,当然是需要运行网络服务在容器中,那么如何配置docker的容器网络,基础网络配置,网桥配置,端口映射,还是很重要。这里的学习思路,是先学习基本的容器网络操作命令后面环节深入学习docker网络配置。容器里运行web服务,是基本需求,想要......
  • 轻松管理CRM系统权限!判断文件路径类型,让你更安全
    随着企业客户关系管理(CRM)系统的普及,权限管理成为了系统安全的重要环节。在CRM系统中,我们有时需要设置部分用户账号对某个路径进行读取、写入或执行操作权限。为了实现这一功能,我们需要先判断文件路径是目录还是文件。本文将介绍如何使用Java实现这一功能。一、判断文件路径是目录......
  • Postgresql中PL/pgSQL的游标、自定义函数、存储过程的使用
    场景Postgresql中PL/pgSQL代码块的语法与使用-声明与赋值、IF语句、CASE语句、循环语句:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/135090263上面讲了基本语法,下面记录游标、自定义函数、存储过程的使用。注:博客:https://blog.csdn.net/badao_liumang_qizhi......
  • c语言 数组与指针
    @TOC前言之前我们讲了指针数组,今天讲一下数组指针。一、数组与指针的概述:数组指针就是数组的指针,就是指向数组的指针。inta[5]={1,2,3,4,5};//定义一个数组int*p=&a[0];//定义一个指针指向数组的首地址,由于数组的首地址就是数组名,所以&a[0]==a;则可写为int*......
  • MySQL 存储过程
    8.1.3mysql流程控制语句mysql流程控制语句和局部变量一样,只能放在存储过程,存储函数和触发器中1.顺序语句begin....end语句块,语句块中可以包含一组语句,语句可以嵌套begin语句块......;end;delimiter命令delimiter结束符;--将mysql的结束符修改为结束符2.......
  • Java基本数据类型、包装类及拆装箱详解
    Java的基本数据类型和对应的包装类是Java语言中处理数据的两个关键概念。基本数据类型提供了简单而高效的方式来存储数据,而包装类使得基本数据类型具有对象的特性。本文将深入探讨基本数据类型与包装类的应用场景及详细描述,并对自动拆箱和装箱的源码实现进行分析。基本数据类型与包......
  • 【Spring教程16】Spring框架实战:详解解读AOP配置管理中AOP切入点表达式和通知类型
    目录1AOP切入点表达式1.1语法格式1.2通配符1.3书写技巧2AOP通知类型2.1类型介绍欢迎大家回到《Java教程之Spring30天快速入门》,本教程所有示例均基于Maven实现,如果您对Maven还很陌生,请移步本人的博文《如何在windows11下安装Maven并配置以及IDEA配置Maven环境》,本文的......
  • 【反汇编3】基本数据类型的表现形式
    参考书籍,《C++反汇编与逆向分析技术揭秘》。 这次主要研究各种数据在计算机里怎么存的,又要涉及补码、科学计数法等基础内容。这些课程计算机专业的都会学,但作为程序员未必有直观的体验,比如java或python程序员,他们不用自己管理内存,也就根本不会接触到这类内容,例如inti=-1;对......
  • 《初学C语言第33天》
    ////——————————————————————scanf的语法并举例说明////scanf是C语言中的一个标准输入函数,用于获取用户输入的数据,并赋值给变量。////——————基本语法:////scanf(format,variables);////其中,format是格式控制字符串,用于指定输入数据的格式,variable......
  • 缺乏针对特定类型攻击(如DDoS)的策略
    缺乏针对特定类型攻击(如DDoS)的策略引言近年来,互联网安全领域发生了许多重大的网络安全事件,其中之一就是分布式拒绝服务(DDoS)攻击。尽管这些攻击引起了广泛关注,但很多公司仍然没有制定针对此类攻击的策略。本文将探讨这种缺乏策略的情况,并为公司提供一些可能的方案来解决这些问......