一、地址和指针的概念

【问题】数据在内存中是如何存储和读取的?
在程序中定义一个变量后,在对程序编译的时候,系统就会给这个变量分类内存单元。编译系统根据程序中定义的变量类型,分配一定长度的空间。例如:一般整型为2个字节,单精度浮点类型分类4个字节,对字符型分配一个字节。内存区的每一个字节有一个编号,这就是“地址”。
一定要弄清楚内存单元的地址域内存单元的内容这两个概念。以宾馆房间号为例,地址就是房间号,单元内容就是住在这个房间里的客人。在程序中一般通过变量名来对内存单元进行存取。其实,程序经过编译以后已经将变量名变为变量的地址,对变量值的存取都是通过地址进行的。
【直接 访问】
按照变量地址存取变量值的方式称为直接访问。
【间接访问】
将变量的地址存放在另一个变量中,它是一种特殊的变量,用于存放地址。
【总结】
在C语言中,将地址形象的称之为“指针”。意思是通过它能够找到以它为地位的内存单元。一个变量的地址称为“指针”。一个变量专门存放另一个变量地址的变量,称之为“指针变量”。指针是一个地址,为指针变量是存放地址的变量。

二、变量的指针和指向变量的指针变量

为了表示指针变量和它所指向变量之间的联系,在程序中用“*”符号表示“指向”的对象。如果已经定义i_pointer为指针变量,则(*i_pointer)是i_pointer所指向的变量。例:

  • i=3;
  • *i_pointer = 3;

1.定义一个指针变量

C语言规定,所有变量在使用前必须定义,指定其类型,并按照此分配内存单元。指针变量不同于整型变量和其它类型的变量,它是专门用来存放地址的,必须将它定义为“指针类型”。
int  i,j;
int *pointer_1,*pointer_2;
第一行定义了两个整型变量,第二行定义了两个指针便变量:pointer_1和pointer_2,它们是指向整型变量的指针变量。

怎样使一个指针变量指向另一个变量呢?
可以使用赋值语句是一个指针变量得到另一个变量的地址,从而使它指向该变量。

pointer_1 = &i;
pointer_2 = &j;

将变量i的地址放在指针变量pointer_1 中,因此pointer_1 就指向了变量i.
在定义指针时注意两点:

  • 指针变量前面的“*”便是该变量的类型为指针型变量。指针变量名是pointer_1和pointer_2。
  • 在定义指针变量时必须指定基类型。

2 指针变量的引用

指针变量只能存放地址,不要将一个整数赋值给一个指针变量。例“


```c
#include<stdio.h>
void main()
{int a,b;int *pointer_1,*pointer_2;a = 100;b = 10;pointer_1 = &a;pointer_2 = &b;printf("%d,%d\n",a,b);printf("%d,%d\n",*pointer_1,*pointer_2);
}

运行结果

100,10
100,10

3.指针变量作为函数参考

函数的参数不仅可以时整数、浮点型、字符型等数据,还可以时指针类型。它的作用是将一个变量的地址传到另一个函数中。例:

#include<stdio.h>
void main()
{void swap(int *p1,int *p2);    //函数的声明int a,b;int *pointer_1,*pointer_2;scanf("%d,%d\n",&a,&b)pointer_1 = &a; pointer_2 = &b;if(a<b) swap(pointer_1,*pointer_2); printf("%d,%d\n",a,b);
}void swap(int *p1,int *p2)
{ int temp;temp = *p1;*p1 = *p2;*p2 = temp;
}

运行结果:

5,9
9,5

形参值的改变不能使实参值发生改变。而应该用指针变量作为函数参数,在函数执行过程中使用指针变量所指向的变量值发生变化,这样就实现了”通过调用函数是变量的值发生变化,在主调函数中可以使用这些改变了的值‘的目的。
C语言中实参变量和形参变量之间的数据传递时单向的“值传递”。指针变量作为函数函数也要遵守这一规则。不可能通过调用函数来改变实参指针变量的值,但可以改变实参指针变量所指变量的值。

【C语言】指针的定义、概念和运用相关推荐

  1. C语言指针:定义,使用及计算指针大小

    关于指针的运算符 代码示例:定义指针 运行结果: 图示 指针本身所占大小sizeof() 代码证明: 基本数据类型的指针都占4个字节:

  2. c语言指针自定义函数,c语言函数指针定义,指针函数和函数指针的区别

    往往,我们一提到指针函数和函数指针的时候,就有很多人弄不懂.下面就由小编详细为大家介绍C语言中函数指针,指针函数和函数指针之间的区别. c语言指针函数定义: 函数指针是指向函数的指针变量. 因此&qu ...

  3. c语言 指针不能赋值吗,程序员编程C语言指针答疑:指针赋值没那么简单

    C语言指针,纸老虎 一.程序员编程C语言答疑合集 更多C语言学习答疑文章,请参阅:程序员编程C语言答疑文章合集 也可以加入下方我的"C语言答疑课堂"圈子,第一时间看到我给大家带来的 ...

  4. C语言编程拼错的纸条,程序员编程C语言指针答疑:小心scanf函数给指针输错值...

    一.程序员编程C语言答疑合集 https://m.toutiaocdn.com/group/6718545102257521166/?app=news_article&timestamp=15 ...

  5. c语言定义node类型指针,C语言指针的概念

    在计算机中,所有的数据都是存放在存储器中的.一般把存储器中的一个字节称为一个内存单元,不同的数据类型所占用的内存单元数不等,如整型量占2个单元,字符量占1个单元等,在前面已有详细的介绍.为了正确地访问 ...

  6. c语言指针详解(概念示例)

    指针是C语言中广泛使用的一种数据类型. 运用指针编程是C语言最主要的风格之一.利用指针变量可以表示各种数据结构: 能很方便地使用数组和字符串: 并能象汇编语言一样处理内存地址,从而编出精练而高效的程序 ...

  7. C语言 指针声明和定义 - C语言零基础入门教程

    目录 一.指针简介 1.内存 2.内存地址 3.指针声明 二.指针类型 三.声明并初始化一个指针 1.声明指针并直接初始化 – 推荐 2.先声明指针在初始化 – 不推荐 四.查看指针地址和指针的值 五 ...

  8. c语言指针的概念和作用,指针:C语言的重要概念和特色.pdf

    指针:C语言的重要概念和特色.pdf 一 指 针 :C语 言 的 重 要 概 念 和 特 色 令 小怀 (定西工贸中等专业学校 ,甘肃 陇西 748100) 摘 要 :指针是C语 言的精髓部分 .也是 ...

  9. golang定义空指针_Go语言指针声明及操作方法

    指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向(points to)存在电脑存储器中另一个地方的值.由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元.因此,将地址形 ...

  10. Database之SQLSever:T-SQL数据语言操作(数据定义语句DDL、数据操作语句DML、数据控制语句DCL、其他基本语句、流程控制语句、批处理语句)概念及其相关案例之详细攻略

    Database之SQLSever:T-SQL数据语言操作(数据定义语句DDL.数据操作语句DML.数据控制语句DCL.其他基本语句.流程控制语句.批处理语句)概念及其相关案例之详细攻略 目录 T-S ...

最新文章

  1. mysql join union_MySQL中union和join语句使用区别的辨析教程
  2. Let's do our own full blown HTTP server with Netty--转载
  3. 转-Appium—驱动和常用功能的封装
  4. javascript-发布订阅模式
  5. 导出域控中不活动的计算机_满满干货丨小薇和你聊聊计算机二级的那些事儿
  6. 兰州大学第一届『飞马杯』程序设计竞赛(同步赛),签到题ACFHJ
  7. matlab2c使用c++实现matlab函数系列教程-rank函数
  8. 最佳路径搜索(一):盲目搜索(深度优先,广度优先,深度限制,迭代加深)
  9. mybatis代码自动生成工具-MyBatis Generator
  10. 华为手机怎么使用读卡器_华为G7手机OTG功能详细使用教程
  11. CAD2017下载AutoCAD2017下载安装详细教程
  12. nacos指定外网ip
  13. 以太坊项目代码贡献排名
  14. Win10多用户远程桌面
  15. inflect java_驼峰、下划线、单复数、表名-类名转换...通通交给字符串处理库:i...
  16. java达内项目_达内IT学院举办Java互联网架构师项目峰会
  17. 【长按图片识别】uniapp vue开发时,点击图片识别—实现转发、收藏、识别图片二维码
  18. 3ds Max下载_3ds Max 2023上线了哪些新功能?
  19. TaWRKY19/61/82激活糖转运蛋白TaSTP3从而增强小麦条锈病敏感性
  20. 分治算法——Karastsuba算法

热门文章

  1. 最坏情况为线性时间的选择算法(SELECT)
  2. 知识图谱问答的实践技术分享的书面版本
  3. 关于keystore 证书转*.x509.pem 和*.pk8
  4. 为了让人愿意花3000块买口锅,这些高端厨具品牌也是蛮拼的
  5. Unity3D脚本手册
  6. I2C协议——物理层和协议层
  7. word文档标注参考文献以及标注参考文献出现的直线问题的解决
  8. ppt转换器免费下载在哪儿
  9. 制作niceScroll滚动条
  10. 【Nginx-利用Referer防盗链】解决网站被可疑链接调取接口