C语言教程:指针 种量要的数英,也是C 罷够有交地表尔杂的数据 构。正确使用指钍能够写出特 别紧凑高效的程序
C语言教程:指针 学习目的:指针是经常被用到的 一种重要的数据类型,也是C语 言的一个特色内容,运用指针 能够有效地表示复杂的数据结 构。正确使用指针能够写出特 别紧凑高效的程序
指针内容介绍 1地址与指针 2指针与数组 3指针与字符串 4指针与函数 5指针数组和指向指针的指针
指针内容介绍 1 地址与指针 2 指针与数组 3 指针与字符串 4 指针与函数 5 指针数组和指向指针的指针
指针:即地址;地址:存储单元首字节的地址 指针变量:存放单元地址的变量或存放变量地址的变量, 称为指向变量的指针即指针变量。 兴访问数据两种方法: 直接,用变量名; 间接,用变量的地 址通过变量的指针 变量 Oxaa06 int a=3, p p=&a; printf( %od, %od,, a, "p) 名一18的權韩改址 苻饉单元卖量殖值
指针:即地址;地址:存储单元首字节的地址 指针变量:存放单元地址的变量或存放变量地址的变量, 称为指向变量的指针即指针变量。 访问数据两种方法: 直接,用变量名; 间接,用变量的地 址通过变量的指针 变量 int a=3,*p; p=&a; printf(“%d,%d”,a,*p); 0xaa06
指针变量在内存中用两个字节存储,分析如下 Int p printf("n%d", sizeof(p)) *与&两个运算符:*取值,运算对象是 个地址;&取址,运算对象是一个变量 ◆对*号的理解:*是取值运算符;也可以理解 为类型说明符,如 x int p, p=(int *)malloc(2) ;(float )5/2
指针变量在内存中用两个字节存储,分析如下 int *p; printf("\n%d",sizeof(p)); *与&两个运算符:*取值,运算对象是一 个地址;&取址,运算对象是一个变量 对*号的理解:*是取值运算符;也可以理解 为类型说明符,如 int *p;p=(int *)malloc(2); (float)5/2
*与&两个运算符;*取值,运算对象是一个地 址;&取址,运算对象是一个变量。对*号的 理解:*是取值运算符;也可以理解为类型说 明符。如 int*p; p=(int *)malloc(2);(float )5/2 指针变量、地址具有基类型,决定系统从该地 址处连续的几个字节中取数据,决定所指的数 据在内存中的存储结构(多少个字节,采用什 么编码表示等)
*与&两个运算符:*取值,运算对象是一个地 址;&取址,运算对象是一个变量。对*号的 理解:*是取值运算符;也可以理解为类型说 明符。如 int *p;p=(int *)malloc(2); (float)5/2 指针变量、地址具有基类型,决定系统从该地 址处连续的几个字节中取数据,决定所指的数 据在内存中的存储结构(多少个字节,采用什 么编码表示等)
例: int a=0x141, * p1 char *p2 p2 0x3001 00001 pI=&a, p2=&a printf( %od%/od,*pl, *p2); 运行结果为:32165
例: int a=0x141,*p1; char *p2; p1=&a;p2=&a; printf("%d %d",*p1,*p2); 运行结果为:321 65
个地址若没有基类型,则不能用该地址去 取值,inta;后&a的基类型是nt型 ◆可以使用(int*)对地址的基本类型进行强制 的类型转换,分析如下程序: int a=3.bcd b=&a C=*(b) d=*(int *)b printf("n%d%X. o/d" *&a, b,c, d);
一个地址若没有基类型,则不能用该地址去 取值,int a;后&a的基类型是int型。 可以使用(int *)对地址的基本类型进行强制 的类型转换,分析如下程序: int a=3,b,c,d; b=&a; c=*(b); d=*(int *)b; printf("\n%d %x %d %d",*&a,b,c,d);
指针变量的定义: 类型说明符*变量名; 例如:int*pl 对指针变量的定义包括三个内容: (1)指针类型说明,即定义变量为一个指针变量; (2)指针变量名; (3)变量值(指针)所指向的变量的数据类型 指针变量初始化的方法: nt a int p=&a
指针变量的定义: 类型说明符 *变量名; 例如: int *p1; 对指针变量的定义包括三个内容: (1)指针类型说明,即定义变量为一个指针变量; (2)指针变量名; (3)变量值(指针)所指向的变量的数据类型。 指针变量初始化的方法: int a; int *p=&a;
指针变量的引用 紫未经赋值的指针变量不能使用,否则将造成系统 混乱,甚至死机。nta=3,*p; print(“o%d*p) 指针变量的赋值只能赋予地址,决不能赋予任何 其它数据,否则将引起错误 在C语言中,变量的地址是由编译系统分配的, 对用户完全透明,用户不知道变量的具体地址, 但可以通过&运算符来得到。 鱉不允许把一个数赋予指针变量,故下面的赋值是 没有意义的、错误的:int*p;p=1000 注意:被赋值的指针变量前不能再加“*”,如 写为*p&a是错误的
指针变量的引用 未经赋值的指针变量不能使用,否则将造成系统 混乱,甚至死机。 int a=3,*p;printf(“%d”,*p); 指针变量的赋值只能赋予地址,决不能赋予任何 其它数据,否则将引起错误。 在C语言中,变量的地址是由编译系统分配的, 对用户完全透明,用户不知道变量的具体地址, 但可以通过&运算符来得到。 不允许把一个数赋予指针变量,故下面的赋值是 没有意义的、错误的:int *p; p=1000; 注意:被赋值的指针变量前不能再加“*”,如 写为*p=&a 是错误的
指针变量和一般变量 样,存放在它们之中的值 是可以改变的,也就是说 p1 可以改变它们的指向,假 设 ij,pl, p2 2 F=a;j=b; pl=&i; p2=&j 则建立如下图所示的联系
指针变量和一般变量一 样,存放在它们之中的值 是可以改变的,也就是说 可以改变它们的指向,假 设: int i,j,*p1,*p2; i='a'; j='b'; p1=&i; p2=&j; 则建立如下图所示的联系: