指针_定义一个指针变量他的值是多少-程序员宅基地

技术标签: C语言  指针  

          指针是C语言管理内存的强大工具。

     1.指针变量的声明

       指针可以视为一个普通变量,通常所说的定义一个指针其实就是一个声明指针变量的过程,编译器根据指针变量声明语句,为指针变量开辟内存空间,使其有实际意义,这样指针变量才可用。

      在声明一个指针变量时,需要向编译器提供以下信息: 

       指针的类型原则上,指针的类型应与其所指向的数据类型一致,但也有例外。

       指针变量名。

       举例来说,下述语句用于声明一个指向int型数据的指针pInt:

       int* pInt;

       不难看出,要声明一个指向某种类型的指针变量,其基本形式为:

      类型* 指针变量名;

      int* p1=NULL;(NULL是C语言中预定义的空指针关键字)

  

    1.2 指针变量的初始化

        在声明一个指针后,编译器不会自动为其完成初始化。此时,指针的值是不确定的,也就是说,该指针的值取决于指针所在的内存区域的值,而该值是完全随机的。因此,指针变量的初始化十分重要,直接使用未加初始化的指针变量,可能会给程序带来各种内存错误,因为完全不知道指针指向的是哪一块内存,通过指针操作的又是哪块内存。

     如果在指针变量的声明之初确实不知道该指针变量指向何处,最简单的方式就是将其置为“0”,C语言中提供的关键字NULL,例如int* p1=NULL;这样,指针便不会在内存中乱指一气了。

    如果想要指针变量确切的指向某个变量,需要使用取地址操作符&。

   

    1.3 指针变量的值

    “指针变量的值”是指针本身存储的数值,这个数值将被编译器作为一个地址,而不是一个一般的数值,在32位程序里,所有的类型的指针的值都是一个32位整数,因为32位程序里内存地址的长度都是32位。“指针所指向的内存区”就是从指针的值所代表的那个内存地址开始的,长度为sizeof(指针所指向的数据类型)的一片内存区。

   “一个指针的值是A”,是指“该指针指向了以A为首地址的一片内存区域”;反之,说“一个指针指向了某个内存区域”,是指“该指针的值是这块内存区域的首地址”。


   1.4取地址操作符

       声明一个变量时,为该变量开辟内存空间的任务是由编译器自动完成的,用户不需要关心变量在内存中的位置。但是,如果,在程序中用到了某个变量的地址信息,则该怎么办呢?C语言提供了取地址运算符&返回某个程序实体的地址信息,举例来说

      int num = 0;

      int* p = #

     &num返回的是变量num在内存中的地址信息,可以直接将此值付给同类型的指针P。


    1.5指针变量占据一定的内存空间

        指针变量声明后,编译器为其开辟一定的内存空间,即指针变量占据一定的内存空间,而且,不论是何种类型的指针,都占据4个字节(这是由32位地址数据决定的)。

      

    1.6指向指针的指针

       指针变量也是变量,占据一定内存空间,有地址。因此,可以用一个指针指向它,这称为指向指针的指针或者二级指针。可以通过“**”声明一个二级指针。

   

      

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/dark_baron/article/details/53466387

智能推荐

视频会议常用术语——转自华为TE40帮助文档_华为会议终端演示会场锁定-程序员宅基地

文章浏览阅读2.9k次。术语查看Web页面在线帮助中用到的术语。数字1080i 分辨率为1920×1080的隔行扫描图像格式。 1080p 分辨率为1920×1080的逐行扫描图像格式。 2CIF 分辨率为352×576的逐行扫描图像格式。 2SIF 分辨率为352×480的逐行扫描图像格式。 4CIF 分辨率为704×576的逐行扫描图像格式。 4SIF 分辨率为704×480的逐行扫描图像格式。 720p 分辨率为1_华为会议终端演示会场锁定

【 linux如何查看cuda版本】_linux cuda version-程序员宅基地

文章浏览阅读1.5w次,点赞2次,收藏2次。linux如何查看cuda版本终端输入nvcc -V命令,即可查询到CUDA版本号_linux cuda version

3D 目标(pointpillars)识别方案_pointpillars 小目标-程序员宅基地

文章浏览阅读4.5k次,点赞5次,收藏45次。3D 目标(pointpillars)识别方案对车辆进行3D的目标识别,经过调研之后,发现autoware 和 apollo等平台均采用pointpillars算法。因此便尝试单纯使用激光雷达数据进行识别。方案实施步骤:理解pointpillars算法模型,并复现。了解自动驾驶数据集KITTI的格式。采集数据并标注。训练与部署。一、理解pointpillars算法模型pointpillars的论文解读可以看这篇论文解析。二、了解KITTI数据的格式因为pointpillars输入的数_pointpillars 小目标

OSG粒子系统特效-----雨雪、爆炸、烟雾_粒子特效实现雾-程序员宅基地

文章浏览阅读853次。OSG粒子系统特效-----雨雪、爆炸、烟雾_粒子特效实现雾

数据技术篇之数据同步-程序员宅基地

文章浏览阅读2.5k次,点赞2次,收藏15次。数据同步_数据同步

Kafka : Kafka入门教程和JAVA客户端使用-程序员宅基地

文章浏览阅读5.4w次,点赞36次,收藏238次。目录目录Kafka简介环境介绍术语介绍消费模式下载集群安装配置命令使用JAVA实战参考文献Kafka简介由Scala和Java编写,Kafka是一种高吞吐量的分布式发布订阅消息系统.环境介绍操作系统:centos6.5 kafka:1.0.1 zookeeper:3.4.6术语介绍Broker : Kafka集群包含一个或..._kafka

随便推点

testng的用法--未消化的,未研究明白-程序员宅基地

文章浏览阅读117次。2019独角兽企业重金招聘Python工程师标准>>> ..._f网站

二、svn分支策略原理:-程序员宅基地

文章浏览阅读159次。零、说明:-----欢迎拍砖1、下面内容是找的网上资料总结的,不是生产环境内容,svn分支策略好麻烦啊2、merge很重要而且不好理解,merge修改的只是本地的工作副本,所以只要不提交,不会对服务端造成影响3、多个项目互相依赖,会不会混乱,版本怎么管理那????一、Trunk,Branches,Tags说明1、Branches、Tags生成都是使用svncopy命令生成..._svn切换分支的底层原理

阿里云轻量应用服务器LAMP镜像下搭建网站_阿里云轻量服务器lamp不用域名怎么建站-程序员宅基地

文章浏览阅读915次。阿里云轻量应用服务器LAMP镜像下搭建网站1.服务器选择我配的是2GB内存1核 40GB SSD系统盘。阿里的云翼计划24岁以下自动获取学生身份,这样购买的话一个月只要9.5元。2.选择应用镜像因为部署的是php项目所以选择的是LAMP应用镜像。3.购买之后,环境都是搭配好的。剩下的就是按照步骤配置MySQL和上传文件。1.解析域名。阿里云解析域名可在此快速添加DNS解析,其他域..._阿里云轻量服务器lamp不用域名怎么建站

Makefile教程-程序员宅基地

文章浏览阅读2次。Makefile学习教程: 跟我一起写 Makefile 0 Makefile概述 0.1 关于程序的编译和链接1 Makefile 介绍 1.1 Makefile的规则1.2 一个示例1.3 make是如何工作的1.4 makefile中使用变量1.5 让make自动推导1.6 另类风格的makefile1.7 清空目标文件的规则2 Makefile 总述 2.1 Makefile里...

iframe页面嵌套问题提示X-Frame-Options问题_proxy_hide_header x-frame-options;-程序员宅基地

文章浏览阅读9.8k次。背景:有一个页面需要被嵌入到另外一个系统中发现嵌入不进去浏览器控制台提示报错:Refused to display 'http://10.45.80.3/portal/iframe.html' in a frame because it set 'X-Frame-Options' to 'sameorigin'.分析:需要嵌入的页面加了跨域的限制解决办法:..._proxy_hide_header x-frame-options;

复旦大学邱锡鹏教授团队:Transformer最新综述-程序员宅基地

文章浏览阅读2k次,点赞4次,收藏28次。PaperWeekly 原创 · 作者 |王馨月学校 |四川大学本科生研究方向|自然语言处理Transformer 在自然语言处理、计算机视觉、音频处理等许多人工智能领域都取得了..._分层transformer

推荐文章

热门文章

相关标签