清华大学出版社 TSINGHUA UN/VERSITY PRESS 第八章 使用指针
第八章
清华大学出版社 TSINGHUA UNIVERSITY PRESS ●主要内容 8.1地址和指针的概念 8.2变量的指针和指向变量的指针变量 83通过指针引用数组 84通过指针字符串 85指向函数的指针 8.6返回指针值的函数 87指针数组和多重指针 88动态内存分配与指向它的指针变量
⚫ 主要内容 8.1 地址和指针的概念 8.2 变量的指针和指向变量的指针变量 8.3 通过指针引用数组 8.4 通过指针字符串 8.5 指向函数的指针 8.6 返回指针值的函数 8.7 指针数组和多重指针 8.8 动态内存分配与指向它的指针变量
清华大学出版社 TSINGHUA UNIVERSITY PRESS 81地址和指针的概念 内存区的每一个字节有一个编号,这就是 地址”。如果在程序中定义了一个变量,在 对程序进行编译时,系统就会给这个变量分配内 存单元 1、按变量地址存取变量值的方式称为“直接访问”方式 i n t f(% d",i) s c nf("%d",&i): k=i+j:
8.1地址和指针的概念 内存区的每一个字节有一个编号,这就是 “地址” 。如果在程序中定义了一个变量,在 对程序进行编译时,系统就会给这个变量分配内 存单元。 1、按变量地址存取变量值的方式称为“直接访问”方式 printf(″%d″,i); scanf(″%d″,&i); k=i+j;
清华大学出版社 TSINGHUA UNIVERSITY PRESS 内存用户数据区 2000 变量i 2002 369 变量j 2004 变量k 3010 2000 变量i_ pointer
清华大学出版社 TSINGHUA UNIVERSITY PRESS 2.另一种存取变量值的方式称为“间接访问”的方式 即,将变量i的地址存放在另一个变量中。 在C语言中,指针是一种特殊的变量,它是 存放地址的。 2000 (a) i pointer 2000 2000 (b)
2. 另一种存取变量值的方式称为“间接访问”的方式。 即,将变量i的地址存放在另一个变量中。 在C语言中,指针是一种特殊的变量,它是 存放地址的
清华大学出版社 TSINGHUA UNIVERSITY PRESS 指针和指针变量的定义: 个变量的地址称为该变量的“指针 例如,地址2000是变量i的指针。如果有一个变 量专门用来存放另一变量的地址(即指针),则 它称为“指针变量”。上述的 i_pointer就是一 个指针变量
一个变量的地址称为该变量的“指针” 。 例如,地址2000是变量i的指针。如果有一个变 量专门用来存放另一变量的地址(即指针),则 它称为“指针变量”。上述的i_pointer就是一 个指针变量。 指针和指针变量的定义:
清华大学出版社 TSINGHUA UNIVERSITY PRESS 8.2变量的指针和指向变量的指针变量 1 pointer来1 pointer 2000 2000 8.2.1怎样定义指针变量 定义指针变量的一般形式为 基类型指针变量名;
8.2 变量的指针和指向变量的指针变量 8.2.1 怎样定义指针变量 定义指针变量的一般形式为 基类型 *指针变量名;
清华大学出版社 TSINGHUA UNIVERSITY PRESS 下面都是合法的定义: float *pointer 3 char pointer 4 可以用赋值语句使一个指针变量得到另一个变 量的地址,从而使它指向一个该变量 例如: pointer 1 pointer 1 =& pointer 2=&j; pointer
下面都是合法的定义: float *pointer_3; char *pointer_4; 可以用赋值语句使一个指针变量得到另一个变 量的地址,从而使它指向一个该变量。 例如: pointer_1=&i; pointer_2=&j;
清华大学出版社 TSINGHUA UNIVERSITY PRESS 在定义指针变量时要注意两点 (1)指针变量前面的“*”,表示该变量的类型为指针型 变量 例:foat* pointer1; 指针变量名是 pointer1,而不是* pointer_1。 (2)在定义指针变量时必须指定基类型。 需要特别注意的是,只有整型变量的地址才能放到指向 整型变量的指针变量中。下面的赋值是错误的 float a int pointer 1 pointer 1=&a;
在定义指针变量时要注意两点: (1)指针变量前面的“*”,表示该变量的类型为指针型 变量。 例: float *pointer_1; 指针变量名是pointer_1 ,而不是* pointer_1 。 (2) 在定义指针变量时必须指定基类型。 需要特别注意的是,只有整型变量的地址才能放到指向 整型变量的指针变量中。下面的赋值是错误的∶ float a; int * pointer_1; pointer_1=&a;
清华大学出版社 TSINGHUA UNIVERSITY PRESS 在对指针变量赋值时需要注意两点: (1)指针变量中只能存放地址(指针),不要将一个 整数赋给一个指针变量 例:* pointer1=100 * pointer1是指针 变量,100是整数,不合法* (2)赋给指针变量的变量地址不能是任意的类型,而 只能是与指针变量的基类型具有相同类型的变量 的地址
在对指针变量赋值时需要注意两点: ⑴ 指针变量中只能存放地址(指针),不要将一个 整数赋给一个指针变量。 例: * pointer_1=100; /* pointer_1是指针 变量,100是整数,不合法 */ (2) 赋给指针变量的变量地址不能是任意的类型,而 只能是与指针变量的基类型具有相同类型的变量 的地址