c 语言输出指针的值,C 语言指针

C 语言指针

在本教程中,您将学习指针。什么是指针,如何使用它们以及在示例的帮助下使用它们时可能遇到的常见错误。

指针是 C和C ++ 编程的强大功能。在学习指针之前,让我们学习一下C语言编程中的地址。

C 语言地址

如果程序中有变量var,则&var将在内存中提供其地址。

使用scanf()函数时,我们已多次使用地址。scanf("%d", &var);

在此,用户输入的值存储在var变量的地址中。让我们举一个可行的实例。#include 

int main()

{

int var = 5;

printf("var: %d\n", var);

// 注意在var之前使用&

printf("address of var: %p", &var);

return 0;

}

输出结果var: 5

var地址: 2686778

注意:运行上面的代码时,您可能会获得其他地址。

C 语言指针

指针(指针变量)是用于存储地址而非值的特殊变量。

指针语法

这是我们如何声明指针的方法。int* p;

在这里,我们已经声明了一个int类型的指针p。

您也可以通过以下方式声明指针。int *p1;

int * p2;

让我们再举一个声明指针的实例。int* p1, p2;

在这里,我们声明了一个指针p1和一个普通变量p2。

给指针分配地址

让我们举个实例。int* pc, c;

c = 5;

pc = &c;

在此,将5分配给c变量。并且,将c的地址分配给pc指针。

获取指针所指向的值

为了获得指针所指向的内容的值,我们使用了解引用运算符(*)。例如:int* pc, c;

c = 5;

pc = &c;

printf("%d", *pc);   // 输出: 5

此处,c的地址已分配给pc指针。为了获取存储在该地址中的值,我们使用了*pc。

改变指针指向的值

让我们举个实例。int* pc, c;

c = 5;

pc = &c;

c = 1;

printf("%d", c);    // 输出: 1

printf("%d", *pc);  // 输出: 1

我们已经将c地址分配给了pc指针。

然后,我们将的值更改c为1。由于pc和的地址c相同,因此*pc得到1。

让我们再举一个实例。int* pc, c;

c = 5;

pc = &c;

*pc = 1;

printf("%d", *pc);  // 输出: 1

printf("%d", c);    // 输出: 1

我们已经将c地址分配给了pc指针。

然后,我们使用* pc = 1;将* pc更改为1。 由于pc和c的地址相同,因此c等于1。

让我们再举一个实例。int* pc, c, d;

c = 5;

d = -15;

pc = &c; printf("%d", *pc); // 输出: 5

pc = &d; printf("%d", *pc); // 输出: -15

最初,使用的地址c分配给pc指针pc = &c;。因为c是5,所以*pc给我们5。

然后,使用将地址d分配给pc指针pc = &d;。由于d是-15,所以*pc给我们-15。

示例:指针的工作方式

让我们举一个可行的实例。#include 

int main()

{

int* pc, c;

c = 22;

printf("c的地址: %p\n", &c);

printf("c的值: %d\n\n", c);  // 22

pc = &c;

printf("指针pc地址: %p\n", pc);

printf("指针pc内容: %d\n\n", *pc); // 22

c = 11;

printf("指针pc地址: %p\n", pc);

printf("指针pc内容: %d\n\n", *pc); // 11

*pc = 2;

printf("c的地址: %p\n", &c);

printf("c的值: %d\n\n", c); // 2

return 0;

}

输出结果c的地址: 003FFBF8

c的值: 22

指针pc地址: 003FFBF8

指针pc内容: 22

指针pc地址: 003FFBF8

指针pc内容: 11

c的地址: 003FFBF8

c的值: 2

该程序的用法int* pc, c;

d32de478e6b994578829027db9da9920.png

这里创建了一个指针pc和一个普通变量c,都是int类型。由于pc和c没有初始化在最初,指针pc指向没有地址或一个随机地址。变量c有一个地址,但包含随机的垃圾值。

c = 22;

bbc8201965c1738e6d6847fd4293d3c1.png

这是给变量c赋值22,也就是说,22被存储在变量c的内存中。

pc = &c;

6fd9c4a6f97e9a803b50055d80e6469d.png

这将变量c的地址分配给指针pc。

c = 11;

c1f17901273dbc62eb984823fa5e874e.png

这将11分配给变量c。

*pc = 2;

3a598392913f1728362208df7f6706f1.png

这会将指针pc指向的内存位置的值更改为2。

使用指针时的常见错误

假设您希望指针pc指向c的地址。 然后,int c, *pc;

//pc是地址,但c不是

pc = c; // Error

//&c是地址,但* pc不是

*pc = &c; // Error

//&c和pc都是地址

pc = &c;

//c和*pc值

*pc = c;

这是指针语法初学者经常会感到困惑的示例。#include 

int main() {

int c = 5;

int *p = &c;

printf("%d", *p);  // 5

return 0;

}

使用时为什么没有出现错误int *p = &c;?

这是因为int *p = &c;

相当于int *p:

p = &c;

在这两种情况下,我们都创建了一个指针p(不是*p)并给它赋值&c。

为了避免这种混乱,我们可以使用如下语句:int* p = &c;

现在您知道了什么是指针,您将在下一个教程中学习指针与数组的关系。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/364483.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Rabbitmq - 配置

目录 RabbitMQ 配置简介环境变量配置文件运行时参数和策略RabbitMQ 配置 简介 默认配置,已经可以有效地运行RabbitMQ,并且在大多数情况下不需要更改配置。不过为了在生产环境中稳定、高效的运行,RabbitMQ提供了三种方式来定制化服务 环境变量…

Java EE CDI限定词:快速浏览

在上下文和依赖注入(CDI)中, 限定符是类型安全和松散耦合的主体。 为什么? 没有CDI,我们将以类似于下面的方式注入Java EE组件 注意:这实际上不会编译,只是假设的代码片段 例子1 例子2 上述…

Windows 系统光盘刻录教程-光盘怎样刻录?刻录数据光盘用轨道一次写入还是光盘一次写入?...

刻录光盘需要 DVD-RW 的光驱,并且光盘需要 DVD-R 的光盘用于刻录。刻录工具可以使用 https://cn.ultraiso.net/ 来进行刻录。选择软件目录 中 工具 ,选择 刻录光盘映像 即可进行配置: 此时涉及到了光盘写入的方式的选择问题,在网上…

webpack编译时No PostCSS Config的解决方法

1. {loader:"postcss-loader",options: { // 如果没有options这个选项将会报错 No PostCSS Config foundplugins: (loader) > [require(autoprefixer)(), //CSS浏览器兼容]}}2.在项目根目录新建 postcss.config.js文件,并对 postcss进行配置…

c语言库文件是dll还是lib,C语言之静态链接库与动态链接库(2)

我们发现,无论是静态链接库还是动态链接库,最后都有lib文件,那么两者区别是什么呢?其实,两个是完全不一样的东西。静态库对应的lib文件叫静态库,动态库对应的lib文件叫导入库。实际上静态库本身就包含了实际…

NTC3950-10K温度传感器

一、计算公式 补充: B3950 R10K T225度 查RT表,25度对应的是10K 电路:   热敏电阻与上拉电阻R813分压,获取温度与Vo电压的关系,在根据Vo折算出与MCU ADC的数值。 再将ADC代出Rt,即得到ADC与T的关系公式。…

使不安全变得更加安全

总览 如果直接使用Unsafe,则可能会导致JVM崩溃。 当您访问尚未映射的内存页面并且在Unix上的结果是SIGSEG(如果您访问页面0)或SIGBUS(如果您访问另一个未映射的页面)时,就会发生这种情况。 使用MethodHand…

二分搜索树的基本实现

基本操作的动画演示 插入(略) 搜索(略) 删除节点 代码 package com.yunche.datastructure;import java.util.LinkedList; import java.util.Queue;/*** ClassName: BST* Description: 二叉搜索树:每个节点的左子树的值…

js ||

||或位符号 a || b 1.当a ,b 均为true时,return a 2.当 a,b均为false时,return b 3.当a,b为一false一true,return true的那个值 && 与位符号 a&&b 1.当a,b均为true时,return b 2.当,b均为false时&#xff…

计算机c语言二级题型,计算机二级C语言题型和评分标准

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼全国计算机二级考试大题把题目给定程序删除了,正确运行,这样会不会给分?50、请编写函数fun, 函数的功能是: 将M行N列的二维数组中的数据, 按列的顺序依次放到一维数组中。函数fun中给出的语句仅供…

什么是Mockito Extra接口?

如果要编写轻量级的JUnit测试, Mockito是我最喜欢的小帮手。 如有必要,可以通过模拟轻松地替换被测单元的“实际”依赖关系,这非常有用。 尤其是在处理框架API的边界线时,此类依赖项的设置否则可能非常昂贵。 但是有时候情况要复…

d9900 修改ip 思科dcm_思科设备SSH登陆详细配置过程

思科设备SSH登陆详细配置过程我们用GNS3进行拓扑搭建。实验拓扑图如下:进行完基本配置之后开始配置SSH服务器(R2)1.首先验证设备是否支持SSHR2#show ip ssh能够识别这条命令就说明支持。2.配置IP域名。使用config# ip domain-name domain-name全局配置模式命令配置网…

scrapy框架使用splash渲染引擎爬取动态页面

1.启动docker,在命令行里输入 docker run -p 8050:8050 scrapinghub/splash在docker上运行splash引擎 2.接下来就可以来写爬虫文件了 首先在setting里配置 splash_urlhttp://loaclhost:8050 DUPEFLITERscrapy_splash.SplashAwareDupeFilterDOWNLOADER_MIDDLEWARES …

Testing BlogJet

I have installed an interesting application - BlogJet. Its a cool Windows client for my blog tool (as well as for other tools). Get your copy here: http://blogjet.com"Computers are useless. They can only give you answers." -- Pablo Picasso转载于:…

async,await

function timeout(ms){return new Promise(function(resolve){setTimeout(resolve,ms)}) }async function asyncPrint(value,ms){await timeout(ms);console.log(value) } asyncPrint(hello world,5000) 这段代码是过了5秒再显示hello world await是要等待这句代码执行完&…

Homebrew是什么?怎么关闭自动更新?

Homebrew是MacOS 的软件包管理器。 通过它可以安装、卸载、更新、查看、搜索任何想要安装的软件。如:git, node等。 安装Homebrew /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 查看Homebrew br…

C语言中case后面有空格吗,C语言中switch case语句可变参实现方法(case 参数 空格...空格 参数 :)...

正常情况下,switch case语句是这么写的:switch(参数){case1:...;break;case2:...;break;default:...break;}这种是我们最常见的写法,当然也可以这么写:switch(参数){case1:case2:case3:case4:...;break;default:...;break;}接下来…

java 把string转为keyevent_盘点现在Java强大第三方库(字符串操作),程序员都该知道!...

1.字符串与集合间的转化引用第三方库 Apache Commons Lang jre连接值得一提的自JDK1.8以后字符串集合转为字符串可以使用String类下的join()方法,但别的数据类型还是要依靠第三方库--对比JDK和第三库代码如下我自己是一名从事了多年开发的java老程序员,这段时间整理…

Redis安装文档

1.前置条件 前置条件:linux已经可以上网,参考:https://www.cnblogs.com/ZenoLiang/p/10201875.html 2.安装redis 2.1依赖包检查 1. yum install cpp -y 2. yum install binutils -y 3. yum install glibc-kernheaders -y 4. yum install…

JDK 8的启发性Javadoc

标准JDK 8 API文档的一个不错的功能之一就是能够查看所有或不同类别的方法,正如我在博客文章JDK 8 Javadoc Tweaked For Methods Listings中所讨论的那样。 尽管这种分类既方便又有用,但是与JDK 8中许多新类和程序包相关联的文本注释无疑更有用&#xff…