变量的指针和指针变量的区别是什么

合集下载

C语言程序设计_谭浩强_第二版_CH10

C语言程序设计_谭浩强_第二版_CH10

}
第十章 指针 10.3 数组的指针和指向数组的指针变量 10.3.2 通过指针引用数组元素 例10.5输出数组中的全部元素。 ②通过数组名计算数组中元素的地址,找出元素的值。
main() {
int a[10],i; for(i=0;i<10;i++){scanf(“%d”,&a[i]);} print(“\n”); for(i=0;i<10;i++){printf(“%d”,*(a+i));} print(“\n”);
}
运行结果为: 100,10 100,10
第十章 指针 10.2 变量的指针和指向变量的指针变量
10.2.1指针变量的引用 例10.1 通过指针变量访问整型变量
pointer_1 &a
a 100 *pointer_1
pointer_2 &b
b 10 *pointer_2
第十章 指针 10.2 10.2 变量的指针和指向变量的指针变量
10.2.1指针变量的引用 例10.3 通过指针变量访问整型变量
pointer_1 &a
a 5 *pointer_1
pointer_2 &b
b 9 *pointer_2
第十章 指针 10.2 变量的指针和指向变量的指针变量
10.2.1指针变量的引用 例10.3 通过指针变量访问整型变量
b 5 *pointer_2
&b
第十章 指针 10.2 变量的指针和指向变量的指针变量
10.2.1指针变量的引用 例10.3 通过指针变量访问整型变量
pointer_1 &a
a 9 *pointer_1

指针与指针变量

指针与指针变量
2019/2/12
C语言程序设计教程
第8章 指针
17
(3)给指针变量赋空值
给指针变量赋空值,说明该指针不指向任何变量。 “空”指针值用 NULL 表示, NULL 是在头文件 stdio.h 中 预定义的常量,其值为0,在使用时应加上预定义行,如: #include "stdio.h" int *pa=NULL;
2019/2/12
C语言程序设计教程
第8章 指针
14
8.1.3 指针运算
1. 指针的赋值运算
(1)将变量地址值赋给指针变量,使指针指向该变量。 设有如下定义: int a,b,*pa,*pb; float *pf; 第一行定义了整型变量a,b及指针变量pa,pb。pa、pb还没有 被赋值,因此 pa 、 pb 没有指向任何变量 , 下面语句完成对 pa,pb的赋值: pa=&a; pb=&b;
pa与pb都是整型指针变量,它们间可以相互赋值, 如:pb=pa; 即 pa,pb都指向变量a,此时a、*pa、*pb 是等价的。指针指向变化如下图:
pa &a pb &b b,*pb pb a,*pa pa a,*pa,*pb
&a
b
&a
注意:只有相同类型的指针变量才能相互赋值,如pf=pa; 是不允许的。因为pa是整型指针,pf是浮点型指针。
7
2. 指针变量初始化
(1) 指针运算符与地址运算符 与指针引用有关的两个运算符:&与*。 &:取地址运算符 * :指针运算符,或称指向运算符、间接访问运算 符。 指针指向的对象的表示形式: *指针变量 此处*是访问指针所指对象的运算符,与指针定义时的* 不同。

c语言 ●第10章 指针-1

c语言 ●第10章 指针-1
a[1] a[2]

19
2.定义时同时赋值
int a[10];
int *p=a; c规定: /* 相当于int *p=&a[0] */
若有 int a[10];
int *p=a; 则 p+1:指向下一个数组元素。

p+i:其指向下移i个元素。
20
说明:若有 int a[10]; int *p=a; (1) p+i *(p+i) = &a[i] a[i]= a+i *(a+i) (2)数组的指针变量也可带下标 a[i] ,p[i], *(a+i),*(p+i) 是等价的。 (3)a与p的区别:a代表数组a的首地址,是常量。 p=a; p也代表数组a的首地址,是变量。 如:p++; 是正确的,而 a++; 是错误的。 (4)引用数组元素有三种方法: 下标法: a[i]或p[i] 地址法:*(a+i) 效率低 指针法:*(p+i) *p++ 效率高
13
讨论: 若将被调函数swap( )改为: swap(int *p1,int *p2) {int *p; *p=*p1; *p1=*p2; *p2=*p; /*中间变量是指针变量所指的对象*/ } p无确定的地址(地址是随机的),可能指向任何单 元,有可能破坏系统(乱放枪)。加上int c;p=&c;就没 有问题了。
3 6 9 …
i j k
2004
3010
2000
i_pointer
3
二.对内存单位的访问 存数—写 取数—读 对内存单位的访问,是通过地址进行的。 如: printf(“%d”,i); 读 再如:scanf(“%d”,&i); 写 直接访问:按变量的地址直接读写变量的值。 如:k=i+j; (1)从2000开始的内存单元中取出i的值3. (2)从2002开始的内存单元中取出j的值6. (3)相加后,送入2004开始的内存单元。 间接访问:将变量a的地址存入另一变量b中,访问a时,先 找b,取出a的地址,再按此地址访问a。

《C语言程序设计》第8章指针

《C语言程序设计》第8章指针
}
10.3.3 指针变量和数组作函数参数 数组名作形参时,接收实参数组的起始地址;
作实参时,将数组的起始地址传递给形参数组。
引入指向数组的指针变量后,数组及指向数 组的指针变量作函数参数时,可有4种等价形式 (本质上是一种,即指针数据作函数参数):
(1)形参、实参都用数组名 (2)形参、实参都用指针变量 (3)形参用指针变量、实参用数组名 (4)形参用数组名、实参用指针变量
(4)指针变量的++、--与&、*的结合
对于指针变量的++、--与&、*的结合 使用,关键要注意按照运算符的优先级和 结合性进行。
例如: int a=2, *p; p=&a;
•表达式:(*p)++,按运算符的优先级,等价于 a++。其含义为:取出指针变量p所指向的内存单 元的值(即a的值),a的值加1,送回a的内存单 元,a的值变为3,p的值未发生变化,仍然指向 变量a。
程序说明:printf("%s\n",s);语句 通过指向字符串的指针变量s,整体引
用它所指向的字符串的原理:系统首先输出s 指向的第一个字符,然后使s自动加1,使 之指向下一个字符;重复上述过程,直至遇到 字符串结束标志。
main() { char string[ ]=”I love Beijing.”; printf(“%s\n”,string); }
3.数组元素的引用 数组元素的引用,既可用下标法,也可用
指针法。
10.3.2 通过指针引用数组元素 如果有“int a [10],*p=a;” ,则: (1)p+i和a+i都是数组元素a [i]的地址。
(2)*(p+i)和*(a+i)就是数组元素a [i]。 int a [3]; a [0]——*a a [1]——*(a +1) a [2]——*(a +2)

指针与指针变量详解

指针与指针变量详解

//指针变量的最详细的使用说明。

//指针变量是c语言最重要的特性,掌握了它,你就会很快的脱离菜鸟。

指针变量是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。

要搞清一个指针变量需要搞清指针变量变量的四方面的内容:指针变量的类型,指针变量(存放指针后)所指向的类型,指针变量的值或者叫指针变量所指向的内存区,还有指针变量本身所占据的内存区。

让我们分别说明。

先声明几个指针变量放着做例子:例一:(1)int *ptr;(2)char *ptr;(3)int **ptr;(4)int (*ptr)[3];(5)int *(*ptr)[4];如果看不懂后几个例子的话,请参阅我前段时间贴出的文章<<如何理解c和c++的复杂类型声明>>>。

1。

指针变量本身的类型。

从语法的角度看,你只要把指针变量声明语句里的指针变量名字去掉,剩下的部分就是这个指针变量的类型。

这是指针变量本身所具有的类型。

让我们看看例一中各个指针变量的类型:(1)int *ptr; //指针变量的类型是int *(2)char *ptr; //指针变量的类型是char *(3)int **ptr; //指针变量的类型是int **(4)int (*ptr)[3]; //指针变量的类型是int(*)[3](5)int *(*ptr)[4]; //指针变量的类型是int *(*)[4]怎么样?找出指针变量的类型的方法是不是很简单?2。

指针变量所指向的类型。

当你通过指针变量来访问指针变量所指向的内存区时,指针变量所指向的类型决定了编译器将把那片内存区里的内容当做什么来看待。

从语法上看,你只须把指针变量声明语句中的指针变量名字和名字左边的指针变量声明符*去掉,剩下的就是指针变量所指向的类型。

例如:(1)int *ptr; //指针变量所指向的类型是int(2)char *ptr; //指针变量所指向的的类型是char(3)int **ptr; //指针变量所指向的的类型是int *(4)int (*ptr)[3]; //指针变量所指向的的类型是int()[3](5)int *(*ptr)[4]; //指针变量所指向的的类型是int *()[4]在指针变量的算术运算中,指针变量所指向的类型有很大的作用。

变量的指针与指针变量.

变量的指针与指针变量.
格式:类型名*函数名(参数表);
二)指针数组和指向指针的指针
1、指针数组的概念:一个数组中的元素均为指针类型,称为指针数组。
形式:存储类型类型名*数组名[数组长度]
2、指向指针的指针:二级指针的定义:char **p;
含义:表示指针变量p是指向一个字符指针变量(即指向字符型数据的指针变量)的。
三)指针数组作main函数的形参:
指向数组的指针变量
教学难点
指向二维数组的指针
课时安排
2
教学方法
讲授与演示法相结合









一、复习引导
上节课介绍了指针变量的定义及其赋值。一个变量有地址,一个数组包含若干元素,每个数组元素都在内存中占用存储单元,它们都有相应的地址。指针变量既然可以指向变量,当然也可以指向数组和数组元素(把数组起始地址或某一元素的地址放到一个指针变量中)。
二、讲授新课
所谓数组的指针是指数组的起始地址,数组元素的指针是数组元素的地址。
引用数组元素可以用下标法(如a[3]),也可以用指针法,即通过指向数组元素的指针找到所需的元素。使用指针法能使目标程序质量高(占内存少,运行速度快)。
一)指向一维数组的指针
定义形式:
int a[10];
int *p;
p=&a[0];或p=a;
第十章指针
课题
第十章变量的指针与指针变量
教学
目的
1、了解指针与地址的概念
2、掌握指针变量的定义、引用及指针变量作为参数
教材
分析
教学重点
指针变量的定义、引用及指针变量作为参数
教学难点
指针变量作为参数

了解指针与指针变量的概念

了解指针与指针变量的概念

7
//问题:指针的引用 //源程序:5_3.cpp //#include <iostream.h> int main() { int a=2,b=3; int *pa,*pb; pa=&a; //指针变量的赋值 pb=&b; // cout<<"a="<<a<<" b="<<b<<endl; cout<<“*pa=”<<*pa<<“*pb=”<<*pb<<endl; *pa=1; //向pa所指向的变量赋值 *pb=*pa; //向pb所指向的变量赋值 cout<<"a="<<a<<" b="<<b<<endl; return 0; } 指针变量可用另一个指针变量赋值。 pa=pb;
如: *pa = 1;//等同于a = 1; *pb = 2;//等同于b = 2;
(2) 指针变量使用前须先赋初值,且只能赋值为具体有 效的地址. int a=2,b=3; int *pa,*pb; 然后 6
//源程序:2_2.cpp
5.1 指针类型
#include <iostream.h> int main() { int a=2,b=3; int *pa,*pb; pa=&a; pb=&b; cout<<"&a="<<&a<<" &b="<<&b<<endl; cout<<"pa="<<pa<<" pb="<<pb<<endl; return 0; }

指针和指针 变量

指针和指针 变量
上一页 下一页 返回
9.3 数组的指针和指向数组的指针变量
int fmin(int *p, int n) { int i,m;
m=*p; for(i=0;i<n;i++) if (m>*(p+i))
m=*(p+i); return(m);} main( ) { int a[10],min,i; for(i=0;i<n;i++) scanf(“%d”,&a[i]); min=fmin(a,10); printf(“min=%d”,min); }
上一页 下一页 返回
9.2 指针变量的定义与应用
(2) 指针的赋值与比较 例9.1 main( ) { int a,b; int *p1,*p2; a=10;b=20; p1=&a;p2=&b; printf(“%d %d\n”,*p1,*p2); p1=p2; *p2=5; printf (“%d %d\n”,*p1,*p2); }
上一页 下一页 返回
9.2 指针变量的定义与应用
(3) 指针的算术运算
1)指针可以与整型数相加减
若指针变量p当前指向2000单元,其基类型是整型,则以下操 作是合法的。
p=p+1
/* p指向2002单元 */
p=p+2;
/* p指向2006单元 */
p=p-1;
/* p指向2004单元 */
2)指针的减法运算
第9章指 针
9.1 指针和指针变量的概念 9.2 指针变量的定义与应用 9.3 数组的指针和指向数组的指针变量 9.4 字符串的指针和指向字符串的指针变量 9.5 返回指针值的函数 9.6 指针数组与主函数main( )的形参 9.7 函数的指针和指向函数的指针变量
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2变量的指针和指针变量的区别是什么。

答;一个变量的地址指出了变量的存储单元在内存中的具体位置,能对变量进行存取操作。

这个变量的地址就是变量的指针。

指针是一种具有特殊意义的整型数,指针不能存放在一般的整型变量中,必须存放在专门指针的变量中,这类变量就是指针变量。

3 一维数组元素的引用有哪些方式。

答;下标法、地址法、指针法
4 2维数组列地址有哪些计算方法。

答;1 根据数组元素所在的行计算出行地址,然后把行地址转换成行中首元素的地址,再根据数组元素所在的列计算数组元素的地址。

2 根据2维数组的数组元素在存储空间上按行连续存放的特点,每个数组元素的地址等于2维数组元素的首元素地址加上该数组元素相对于首元素位置的偏移量。

3把2维数组的每一行当作一个一维数组,用一维数组元素地址的计算方法计算相应的2维数组元素的地址。

第9章结构体与共用体
1 什么是链表。

其中单向链表具有哪些特点。

答;链表是若干个同样类型的结构通过依次串接方式构成的一种动态数据结构。

链表中的每一个结构体数据成为结点,链表可以分成单向链表和双向链表
单向链表的特点;1 链表中的结点数据可以改变的
2 结点占用的内存是动态分配内存和动态释放内存函数。

2 对单向链表的常用操作有哪些。

答;对单向链表的常用操作有建立、显示、插入,删除和查找。

3 什么是共用体。

答;共用体是一个集合体。

它的各个成员的数据类型可以是不相同的,所有成员共享同一段存储空间,存储空间的大小取决存储单元最大的成员的数据类型。

4 指向结构体类型变量的指针变量引用形式有哪些。

答;有两种形式;【星号指针变量名】。

成员名和指针变量名-大于号成员名。

第10章位运算及编译预处理
1 C提供的编译预处理功能有哪些。

如何实现。

答;功能有三种;宏定义、文件包含和条件编译,分别用宏定义命令、文件包含命令、条件编译命令实现。

2 文件包含的基本功能是什么。

答;文件包含处理是一个源文件可以将另一个源文件的全部内容包含到本文件中来,作为本文件的一部分,这可以节省程序设计人员的重复劳动。

【3【在C语言中提供了几种什么样的位运算符。

答;-、小于小于、大于大于、
4 文件包含需要注意哪些问题
答;一个井include命令只能指定一个被包含文件,包含多个文件侧需多个井include命令;文件包含可以嵌套,即一个被包含文件中可以包含另一个被包含的文件;在井include命令中,文件名可以用双引号或尖括号括起来。

第11章文件
1 文件的结束标志有哪些。

答;每个文件都有一个结束标志。

当文件的位置指针移到文件的结束标志处时,表示文件结束。

如何测试文件是否结束,常有2种方法
1 ASCII码文件的结束标志用【-1】表示。

相关文档
最新文档