C语言的灵魂——————指针
【1】、
地址运算符 & 后跟一个变量名时,&给出该变量的地址
间接运算符 *当后跟一个指针名或地址时,*给出存储在被指向地址中的数值
int *p;
int i=3;
int j;
p=&i;
j=*p;
以上两条语句相当于 j=i
1、p保存了i的地址,因此p指向i
2、p不是i,i也不是p,更准确的说:修改P的值不影响i的值,修改i的值不影响P
的值
【2】指针变量的声明
声明变量需要说明指针所指向变量的类型,为什么?
因为不同的变量类型占用的存储空间大小不同,而有些指针操作需要知道变量类型所占用的存储空间,同时程序也需要了解地址中存储的时何种数据。
【3】指针的定义
地址:
从零开始的非负整数
地址就是内存单元的编号
指针就是地址
指针变量是存放地址的变量
指针和指针变量是两个不同的概念
指针的本质就是一个操作受限的非负整数(指针可以进行相减运算,但不可以进行+ * /的运算)
【4】指针的重要性
表示一些复杂的数据结构
快速的传递数据,减少了内存的耗用【重点】
使函数返回一个以上的值(return只能返回一个值)【重点】
能直接访问硬件
能够方便的处理字符串
是理解面向对象语言中引用的基础
【5】指针的分类
1、基本类型指针
#include<stdio.h>
int main(void)
{
int *p;//p是变量的名字,int *表示p变量存放的是int类型变量的地址
int i = 3;
int j;
p=&i; //地址运算符,p只能够存放int类型变量的地址
j=*p;//*为间接运算符
//上面的两条语句相当于“j=i”
printf("%d\n",j);
return 0;
}
经典指针程序:
/*******************************8
2011年9月13日20:42:47
目的:互换两个数
************************************/
#include<stdio.h>
//不能完成互换功能
void huhuan_1(int a,int b)
{
int t;
t=a;
a=b;
b=t;
printf("a=%d,b=%d\n",a,b);
return ;
}
//可以完成互换功能
void huhuan_2(int *p,int *q)
{
int t;
t=*p;
*p=*q;
*q=t;
return ;
}
int main(void)
{
int a = 3;
int b = 5;
//huhuan_1(a,b);
//huhuan_2(a,b); //错误的
huhuan_2(&a,&b);
printf("a=%d,b=%d\n",a,b);
return 0;
}