指针:是一个值为内存地址的变量(或数据对象)。正如char类型变量的值是字符,int类型变量的值是整数,指针变量的值是地址。在C语言中,指针有许多用法,接着会介绍指针作为函数参数使用
假设一个指针变量名是ptr.可以编写如下语句:
ptr=&pooh; //把Pooh 赋给ptr
对于这条语句,我们说ptr指向pooh。ptr和poor的区别是ptr 是变量,&pooh是常量。或者说ptr是可修该的左值,而&pooh是右值,还可以把ptr指向别处:
ptr=&bah; //把ptr指向bah 而不是Pooh
现在tpr的值是bah的地址
间接运算符
假设已知ptr 指向bah,然后使用间接运算找出存储在bah中的值,该运算有时也被称为解引运算符,不要把间接运算符和二元乘法运算符混淆,虽然他们使用符号相同但是他们的功能并不相同。
val=*ptr; //找出ptr指向的值
语句ptr=&bah;和val=*ptr; 放在一起相当于下面的语句
val=bah;
由此可见,使用地址和间接运算可以直接完成上面这条语句的功能
总结:与指针相关的运算符
地址运算符:&
一般注释:
后跟一个变量名时,&给出该变量的地址 &nurse表示变量nurse 的地址。
地址运算符; *
一般注释:后跟一个指针或地址这是,*给出储存在指针指向地址的值。
nurse =22;
ptr=&nurse ;//指向nurse 的指针
val=*ptr; //把ptr 指向的地址值的值赋给val
执行上面语句的结果是把22赋给val
指针的申明
申明指针变量时必须指定指针所指向变量的类型,因为不同的变量类型占用不同的存储空间,一些指针操作要求知道操作对对象的大小,,另外,程序必须知道存储在指定地址上的数据类型。long 和 float可能占用相同的额存储空间,但是他们储存的数字却是大相径庭。
int *pi ; // pi是指向int 类型的指针
char*pc;
float*pf,*pg; pf pg 都是指向float 类型的变量指针
类型说明符指明了指针所指向的对象类型,*表明声明的变量是一个指针。int*pi;申明的意思是pi是一个指针,*pi是int类型
*和指针之间的空格可有可无
使用指针在函数间通信
//swap3--使用指针解决交换函数的问题
#include<stdio.h>
void interchange(int*u, int*v);
int main(void)
{
int x = 5, y = 10;
printf("Originally x=%d and y=%d.\n", x, y);
interchange(&x, &y); //把地址发送给函数
printf("Now x=%d and y=%d.\n", x, y);
return 0;
}
void interchange(int*u, int *v)
{
int temp;
temp = *u; //temp获得u所指向对象的值
*u = *v;
*v = temp;
}