A1.指针变量的定义及基本使用方法
地址和指针的概念
- 内存区的每一个字节有一个编号,这就是“地址”
- 如果持续中定义了一个变量,在对持续进行编译时,系统就会给这个变量分配内存单元
- 一个变量的地址称为该变量的“指针”
- 指针是一种特殊的变量,它是存放地址的
指针变量的定义方法
- 定义指针变量的一般形式为
- 基类型 *指正变量名
- 如
- int *abcd_1
- 如
- 基类型 *指正变量名
- 定义指针变量时同时将它初始化
- int *pointer_1=&a
- 定义指针变量pointer_1指向a
- int *pointer_1=&a
- 注意
- 指针变量中只能存放地址(指针),不能将一个整数(或如何其他非地址类型的数据)赋给一个指针变量
- 指针变量前面的“*”,表示该变量的类型为指针型变量
- 例
- float *pointer_1(指针变量是pointer_1)
- 例
指针变量作为函数参数
- 函数的参数不仅可以是整型,浮点型,字符型等数据,还可以是指针类型,它的作用是将一个变量的地址传送到另一个函数中
数组指针与指向数组的指针变量的定义
- 一个变量地址,一个数组包含若干元素,每个数组元素都在内存中占用存储单元,它们都有相应的地址。指针变量可以指向变量,也可以质量数组元素(把某一元素的地址放在指针变量中)数组元素的指针就是数组元素的地址
- 对该指针变量赋值:p=&a【0】
通过指针引用数组元素
- 引用一个数组元素
- 下标法
- a【i】
- 指针法
- *(a+1)或*(p+i)
- 下标法
- 不同方式输出数组中元素
- 用数组名加下标(下标法)
- 用数组名计算数组元素地址(指针法)
- 用指针变量计算数组元素地址(p=a,*(p+i))
- 用指针变量先后指向各元素(p=a,p++,*p)
数组名作为函数参数
- 实参与形参的4钟情况
- 形参和实参都用数组名(f(a,10) f(int x【】,int n))
- 实参用数组名,形参用指针变量 (f(a,10) f(int *x,int n))
- 实参形参都用指针变量(*p=a;f(p,10) f(int *x,int n))
- 实参是指针变量,形参为数组名(*p=a;f(p,10) f(int x【】,int n))
- 指向多维数组的指针和指针变量
- int a【2】【3】={1xx--6}
- int *p
- 下列等价
- p=&a【i】【j】
- p=a【i】+j
- p=*(a+1)+j
字符串的表达形式
- 用字符数组存放字符串,并输出字符串
- char string【】=“xxx”
- print(“%s,string”)
- 用字符指针指向字符串
- char *string=“xxx”
- print(“%s,string”)
字符串指针变量与字符数组的区别
- 字符数组是若干个元素组成,每个元素中存放一个字符,而字符指针变量中存放的是字符串第一个字符的地址
- 赋值方式
- 只能对字符数组的各个元素赋值
- 错误
- char str【14】
- str=“i love china!”;
- 对字符指针变量可以采用
- char *a
- a=“i love china!”
- 对字符指针变量赋初值
- char *a=“i love china!”
- char *a
- a=“i love China!”
- 错误
- 只能对字符数组的各个元素赋值
对数组的初始化
- char str【14】={“i love xxx”’
- 定义了一个字符数组,在编译时为他分配内存单元,使由确定的地址。
- 定义一个字符指针变量,给指针变量分配内存单元,其中可以放一个字符变量的地址
- 指针变量的值是可以改变的
函数指针
- 函数指针变量常用的用途之一是把指针作为参数传递到其他函数。
- 指向函数的指针也可以作为参数,以实现函数地址的传递,以被调用的函数使用实参函数
指针函数
- 一个函数可以带回一个整型值,字符值,实型值,指针型数据(地址)
- 带回指针值的数据,一般定义形式
- 类型名 *函数名(参数列表)
指针数组
- 元素都是指针类型数据,指针数组的每个元素都是指针变量
- 一维指针数组的定义
- 类型名 数组名(数组长度)
数组指针
- 指向数组的指针
指向指针的指针
- 定义一个指向指针数据的指针变量
- char **p
- *(*p) 指针变量是指向一个字符指针变量的定义形式