4)C语言指针(C自考学习)

指针和指针变量

  指针就是地址,地址是一种数据类型。指针变量也是变量,但只能存放地址类型的数据,可以称为“地址型”变量。

  1)内存单元和地址

  一个程序运行时,程序本身和程序中用到的数据都要保存在计算机的内部存储器中。内部存储器是由多个内存单元(字节)组成的,每个单元都有自己独有的,相互不同的地址,称内存单元地址。

  2)变量与地址。

  char ch=‘A‘;   short s =5;  float f;    他们分别是1个字节,2个字节,4个字节。(也就是内存单元)

  如果出现这样的赋值语句“f=s+ch;”,操作过程是:

  1.在变量地址对照表中找到变量a,取出s的地址(2010),考虑到其数据类型是短整型,所以从该地址开始的2个字节中取出1个整数(5);

  2。根据同样的方法去除变量ch中的字符‘A’(想当于整数65),相加获得表达式的值为70.

  3.然后再变量与地址对照表中找到变量f的地址,考虑到其数据是单精度型,所以将结果70转换成单精度实行的70.0,再存入变量f对应的4个字节中。

  以上操作,通过变量名查取变量的地址,再从变量对应地址的字节中取得值或将某值存入变量对应地址的字节中称为直接存取方式,由于地址能起到寻找“操作队形”的作用,就像一个指向“操作对象”的指针,所以常把地址称为“指针”。

  3)数组与地址

  除了变量以外,程序中还可以用数组来存放数据。每个数组元素也要占用连续的内存单元。一个数组占用的总字节数等于数组长度乘以每个数组元素占用的字节数。

  在源程序进行编译时,每遇到一个数组,按其数据类型和长度分配内存单元,同时在“数组与地址对照表”中记录数组名、数据类型、数组长度、数组首地址。

  例如这个语句  short a[3]={1,2,3};

  

  在数组地址对照表中找到数组a,取出首地址,按公式计算出数组元素a[0]的地址:3210+0*2=3210,从该地址开始的2个字节(3210、3211)中取出整数1;按相同的方法取出数组元素a[2](地址是3210+2*2=3214)中的整数3,进行相加,得到结果4.然后通过公式计算出a[1]的地址:3210+1*2=3212,再将计算结果4存入3212开始的2个字节(3212、3213)中。上述操作中,通过查表获得数组首地址,通过计算元素地址的方式先获得元素的地址,然后通过这个地址取得元素的值,或将值存入元素的方式也是直接存取方式。

  4)指针变量

  先把要存取的变量的地址存入一个“特殊变量”,然后通过这个其值为地址的“特殊变量”来存取变量的值,这种存取方式由于通过一种存放地址的“特殊变量”来实现的,所以称为间接存取方式。

  这种存放地址值的“特殊变量”就是指针变量。

  使用指针变量:

  通过间接存取方式完成赋值语句“a[1]=i*j;”的操作。事先将变量i、j和数组元素a[1]的地址分别存入指针变量p_i、p_j、p。以后的操作过程如下:先从指针变量p_i中取出i的地址,再从内存该地址中取出变量i的值;按同样方法,通过指针变量p_j取出变量j的值进行相乘;再从指针变量p中取出数组元素a[1]的地址,将运算结果存入内存的该地址中。

指针变量的使用方式

  1)给指针变量赋值

    格式为:指针变量=地址型表达式。

    取地址的运算符是“&”,运算对象是变量或数组元素名,运算结果是对应变量或数组元素的地址。

    例如:变量 i 的地址应写成地址表达式“&i”,数组元素a[1]的地址应写成地址表达式“&a[1]”。

    注意:虽然地址是一个整数,但是,在C语言中不允许把整数看成“地址常量”。所以这的“地址型表达式”不能是整数。

    例如:int i , *p_i

    p_i = &i //使指针变量p_i指向变量i,这的&i 就是地址型表达式。

    p_i = 100;  //企图使指针变量p_i指向地址为100的内存单元,这是错误的。

  2)直接使用指针变量名。

    需要用到地址时,可以直接引用指针变量名。

    例如:int i,j, *p=&i,*q;

    q=p;  //将指针变量p的值(i的地址)赋予指针变量q。

    scanf("%d,%d",q,&j);  //使用指针变量q接受输入数据存入q指向的变量i。

  3)通过指针变量来引用它所指向的变量。

    使用格式为:*指针变量名。

    例如:int i =1,j=2,k,*p=&i;

    k=*p+j; //由于p指向i,所以*p就代表i,结果k等于3.

  注意:取地址运算符的运算对象必须是已定义过的变量或数组元素,但不可以是数组名。运算结果是运算对象的地址。例如,定义了变量a,数组b[10],则&a,&b[0],&b[9]均合法,分别代表变量a地址,数组元素b[0]的地址,数组元素b[9]的地址;而&b则是错误的。

  (未完。。。。)

时间: 2024-11-03 03:25:23

4)C语言指针(C自考学习)的相关文章

网易云课堂程序设计入门--C语言第七周:指针与字符串学习笔记

====================================== 第七周:指针与字符串学习笔记 网易云课堂 程序设计入门–C语言 指针与字符串 学习笔记 ====================================== 7-1指针初步 7-1-1类型大小与取地址运算 sizeof是一个运算符 给出某个变量货类型在内存中所占据的字节数 sizeof(int); sizeif(i); double变量在内存中占据的空间是int变量的两倍 { int a; a =6; prin

c语言指针学习

前言 近期俄罗斯的陨石.四月的血月.五月北京的飞雪以及天朝各种血腥和混乱,给人一种不详的预感.佛祖说的末法时期,五浊恶世 ,十恶之世,人再无心法约束,道德沦丧,和现在正好吻合.尤其是在天朝,空气,水,食品,你能告诉还有没有问题的吗?不知大难至,世人依旧忙.祸福相依,危中有机.那些高级生命,出于慈悲,会救渡我们,但是你要去思考,去发现机缘. 最近较闲,没事就学点基础知识,整天在上层晃,感觉晕的厉害,接地气.关于指针我上学的时候学过一点,我的老师说"指针很难呢",当时以为这老师挺谦虚的.后

GO语言学习(十五)Go 语言指针

Go 语言指针 Go 语言中指针是很容易学习的,Go 语言中使用指针可以更简单的执行一些任务. 接下来让我们来一步步学习 Go 语言指针. 我们都知道,变量是一种使用方便的占位符,用于引用计算机内存地址. Go 语言的取地址符是 &,放到一个变量前使用就会返回相应变量的内存地址. 以下实例演示了变量在内存中地址: package main import "fmt" func main() { var a int = 10 fmt.Printf("变量的地址: %x\n

c语言指针学习[转]

前言 近期俄罗斯的陨石.四月的血月.五月北京的飞雪以及天朝各种血腥和混乱,给人一种不详的预感.佛祖说的末法时期,五浊恶世 ,十恶之世,人再无心法约束,道德沦丧,和现在正好吻合.尤其是在天朝,空气,水,食品,你能告诉还有没有问题的吗?不知大难至,世人依旧忙.祸福相依,危中有机.那些高级生命,出于慈悲,会救渡我们,但是你要去思考,去发现机缘. 最近较闲,没事就学点基础知识,整天在上层晃,感觉晕的厉害,接地气.关于指针我上学的时候学过一点,我的老师说"指针很难呢",当时以为这老师挺谦虚的.后

(转载)c语言指针学习

前言 近期俄罗斯的陨石.四月的血月.五月北京的飞雪以及天朝各种血腥和混乱,给人一种不详的预感.佛祖说的末法时期,五浊恶世 ,十恶之世,人再无心法约束,道德沦丧,和现在正好吻合.尤其是在天朝,空气,水,食品,你能告诉还有没有问题的吗?不知大难至,世人依旧忙.祸福相依,危中有机.那些高级生命,出于慈悲,会救渡我们,但是你要去思考,去发现机缘. 最近较闲,没事就学点基础知识,整天在上层晃,感觉晕的厉害,接地气.关于指针我上学的时候学过一点,我的老师说"指针很难呢",当时以为这老师挺谦虚的.后

C语言指针讲解

指针是C语言的一种数据类型,类似于C中的其他类型,例如int ,char 等.既然指针是一种类型,当我们定义该类型变量,该类型变量就称为指针变量. C中有了指针就有了指向.指向:指针变量指向本身保存的内容(地址或指针)所表示的内存单元. C语言指针是一个特殊的变量,其里面储存的数值被解释成为内存里的一个地址. 在计算机中,所有对数据的操作,都是通过其地址进行的,指针让程序的效率更高,代码更少. 在学习指针的时间,一定要理解并区分指针的四个感念:指针的类型,指针所指向的类型,指针的值,指针本身所占

C语言指针的深入理解

指针是C语言中广泛使用的一种数据类型.运用指针编程是C语言最主要的风格之一. 利用指针变量可以表示各种数据结构:能很方便地使用数组和字符串:并能象汇编语言一样处理内存地址,从而编出精练而高效的程序.指针极大地丰富了C语言的功能. 学习指针是学习C语言中最重要的一环,能否正确理解和使用指针是我们是否掌握C语言的一个标志. C语言为什么有指针以及指针有什么好处? 从大体上讲:指针是 C 语言区别于其他同时代高级语言的主要特征之一.其次因为数组或函数都是连续存放的.通过访问指针变量取得了数组或函数的首

C语言指针,你还觉得难吗?

在研究式学习-c语言程序设计指针式这样介绍的: 内存中存储变量的第一个单元的地址 称为指针,存放指针的变量称为指针变量: 变量的访问方式有: 直接访问方式:按变量名查找其首地址 间接访问方式:通过指针访问 int swap(int p,int q){ int temp; temp=p; p=q; q=temp;} 现在理解了这个函数为什么要用指针了: 因为C语言中实参变量和形参变量之间的数据传递是单向的值传递方式,虽然运用指针被调函数不能改变实参指针变量的值,但可以改变实参指针变量指向的变量的值

C语言指针解说

指针是C语言的一种数据类型.类似于C中的其它类型,比如int ,char 等.既然指针是一种类型,当我们定义该类型变量.该类型变量就称为指针变量. C中有了指针就有了指向. 指向:指针变量指向本身保存的内容(地址或指针)所表示的内存单元. C语言指针是一个特殊的变量.其里面储存的数值被解释成为内存里的一个地址. 在计算机中,全部对数据的操作,都是通过其地址进行的.指针让程序的效率更高,代码更少. 在学习指针的时间,一定要理解并区分指针的四个感念:指针的类型,指针所指向的类型,指针的值,指针本身所

彻底搞定C语言指针详解

1.语言中变量的实质 要理解C指针,我认为一定要理解C中“变量”的存储实质, 所以我就从“变量”这个东西开始讲起吧! 先来理解理解内存空间吧!请看下图: 内存地址→ 6 7 8 9 10 11 12 13 ----------------------------------------------------------------- ... | | | | | | | |.. ------------------------------- ---------------------------