- 指針是什么
- 如果在程序中定义了一个变量,在对程序进行编译时,系统就会给该变量分配内存单元
- 内存区的每一个字节有一个编号,这就是“地址”,它相当于旅馆中的房间号。
- 在地址所标识的内存单元中存放数据,这相当于旅馆房间中居住的旅客一样。
- 由于通过地址能找到所需的变量单元,我们可以说,地址指向该变量单元。
- 将地址形象化地称为“指针”
为了表示将数值3送到变量中,可以有两种表达方法:
- 将3直接送到变量i所标识的单元中,例如:i=3;
- 将3送到变量i_pointer所指向的单元(即变量i的存储单元),例如:*i_pointer=3; 其中*i_pointer表示i_pointer指向的对象
假设i_pointer中的值是变量i的地址(2000),这样就在i_pointer和变量i之间建立起一种联系,即通过i_pointer能知道i的地址,从而找到变量i的内存单元
由于通过地址能找到所需的变量单元,因此说,地址指向该变量单元将地址形象化地称为“指针”。意思是通过它能找到以它为地址的内存单元
一个变量的地址称为该变量的“指针”例如,地址2000是变量i的指针
- 如果有一个变量专门用来存放另一变量的地址(即指针),则它称为“指针变量”
- i_pointer就是一个指针变量。指针变量就是地址变量,用来存放地址的变量,指針变量的值是地址(即指针)
- “指针”和“指针变量”是不同的概念
- 可以说变量i的指针是2000,而不能说i的指针变量是2000
- 指针是一个地址,而指针变量是存放地址的变量
- 怎样定义指针变量
定义指针变量的一般形式为:
类型 * 指针变量名;
如:int *pointer_1, *pointer_2;
- int是为指针变量指定的“基类型”
- 基类型指定指针变量可指向的变量类型
- 如pointer_1可以指向整型变量,但不能指向浮点型变量
下面都是合法的定义和初始化:
float *pointer_3;
char *pointer_4;
int a,b;
int *pointer_1=&a,*pointer_2=&b;
- 怎样引用指针变量
(1) & 取地址运算符。
&a是变量a的地址
(2) * 指针运算符(“间接访问”运算符)
如果: p指向变量a,则*p就代表a。
k=*p; (把a的值赋给k)
*p=1; (把1赋给a)
- 指针常量
- 常量指针
- 指向常量的指针常量
- 如果想通过函数调用得到n个要改变的值, 可以通过指针作为形参来实现
- 注意:函数的调用可以(而且只可以)得到一个返回值(即函数值),而使用指针变量作参数,可以得到多个变化了的值。如果不用指针变量是难以做到这一点的。
- 要善于利用指针法
例如: 输入2个数,要求得到两个数的和的结果
#include //包含标准输入输出头文件
void calcFunc(int x,int y,int * result); //函数声明
int main(void) //主函数,程序的入口
{
int a,b,c; //定义整型变量a,b
scanf(“%d,%d”,&a,&b); // 从键盘输入2个数存入a,b
calcFunc(a,b,&c); // calcFunc函数调用
printf("a+b=%d\n",c);
return 0;
}
void calcFunc(int x,int y,int * result)
{
*result = a + b; //和值赋给result指向的对象
}