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;

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

c = 22;

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

pc = &c;

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

c = 11;

这将11分配给变量c。

*pc = 2;

这会将指针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;

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

c 语言输出指针的值,C 语言指针相关推荐

  1. c语言 return两个值,c语言return能不能有2个以上返回值

    c语言return能不能有2个以上返回值 c语言return能不能有2个返回值 比如说return(a,b) 更新时间:2019-05-18 06:19 最满意答案 不是,要想返回2个以上返回值,建议 ...

  2. c语言计算文件摘要值,c语言文件操作摘要.ppt

    c语言文件操作摘要 第十章 文件 10.1 C文件概述 文件:存储在外部介质上数据的集合,是操作系统数据管理的单位 文件处理方法 缓冲文件系统:高级文件系统,系统自动为正在使用的文件开辟内存缓冲区 非 ...

  3. r语言 c 函数返回值,R语言入门 输出函数 cat、print、paste等区别理解

    一. 简介 cat.print函数都是输出函数 > cat("hello world") hello world >> print("hello wor ...

  4. c语言输出n转义字符串,C语言转义字符介绍和示例

    C语言中,字符需要转义的情况有两种: 1)对于 ASCII编码,0\~31(十进制)范围内的字符为控制字符,它们都是看不见的,不能在显示器上显示,也无法从键盘输入: 2)某些字符在C语言中有特别的用途 ...

  5. 怎么用C语言输出字符B,使用C语言实现A口为输入B口为输出

    //*****************************************************************************/ // 名称: ex6_c // 来源: ...

  6. c语言输出编号姓名成绩,c语言 学生信息包括,学号,姓名,五门功课的成绩.输入输出。总分排序...

    c语言 学生信息包括,学号,姓名,五门功课的成绩.输入输出.总分排序 來源:互聯網  2010-06-16 18:12:05  評論 分類: 電腦/網絡 >> 程序設計 >> ...

  7. r语言 c语言调用函数返回值,r语言中怎样查看函数源代码

    在R中,代码可以分为如下几个级别: ​首先,是你输入了函数对象名称,你可以直接看到代码的,如要获得函数对象fivenum的代码,就只需要在Console中键入函数对象名称fivenum就可以得到结果, ...

  8. c语言字母随机初始值,C语言的未初始化的数组的值为什么是随机的

    突然想起来前几天同学问我为什么没有初始化的数组的值是随机的,发现这个困惑自己也是存在的,所以自己总结的心得. 1. 首先,并不是所有未初始化的数组的值都是随机的.对于没有初始化的数组,分两种情况: ( ...

  9. 为什么C语言输出结果总是1,c语言编程问题这个题我哪里错了输出结果总是0

    c语言编程问题这个题我哪里错了输出结果总是0 答案:2  信息版本:手机版 解决时间 2020-05-03 18:57 已解决 2020-05-03 06:15 编写程序,输入两个正整数m和n(100 ...

最新文章

  1. phpstorm8 license key
  2. 转载:缓存 Cache
  3. numpy学习3:对象属性和基本数据类型
  4. 多选题spss相关分析_SPSS进行典型相关分析结果总结
  5. GDCM:gdcm::Rescaler的测试程序
  6. 第二章:Java_基本语法_5 数组
  7. 工作中遇到的问题--使用注解进行增加删除修改的验证
  8. ssd目标检测训练自己的数据_目标检测Tensorflow object detection API之训练自己的数据集...
  9. Java之动手动脑(三)
  10. fragment photoshop_史上最接地气的Photoshop?谈PS 2021的黑科技 - Adobe
  11. 零基础开始学 Web 前端开发,有什么建议吗?
  12. easypoi之IExcelVerifyHandler自定义校验使用
  13. Spring Boot文件上传示例
  14. 从pandas到geopandas
  15. 《Entity Framework 6 Recipes》中文翻译系列 (11) -----第三章 查询之异步查询 (转)...
  16. Java基础-SSM之Spring的AOP编程
  17. python操作微信电脑版_【Python】【微信】+操作电脑版微信
  18. WPF基础五:UI②内容元素Frame
  19. 李狗蛋和二狗子因为HTTP or RPC打起来了No.135
  20. JetBrains系列pycharm等设置主题皮肤

热门文章

  1. matlab光学毕业论文,光学信息处理实验的Matlab仿真.doc
  2. libevent简介和使用
  3. android IO流_Flutter实战经验(十):打包和发布到 Android 平台
  4. linux系统搭建ftp服务器--只给某个用户访问其默认目录下的文件
  5. CSS浏览器兼容性问题
  6. 系统间数据传输,产品经理视角的9千字总结:接口、otter、log4j、SFTP、MQ……
  7. c++进制转换代码_轻松实现C/C++各种常见进制相互转换,你还不会你就落后了
  8. java object对象的方法_Java常见对象Object类中的个别方法
  9. java成绩查询_JavaWeb项目第三次总结_成绩查询的实现
  10. 我是如何使用git把本地代码上传到github上的,值得借鉴