------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------
1、地址概念的理解:
计算机硬件系统的内部存储器中,拥有大量的存储单元(容量为1字节)。为了方便管理,必须为每个存储单元编号,这个编号就是存储单元的“地址”。每个存储都有一个唯一的地址。
内存地址———内存单元的编号
在地址多标示的存储单元中存放数据。
注意: 内存单元的地址与内存单元中的数据是两个完全不同的概念。
变量地址———系统分配给变量内存单元的起始地址
2、指针
内存单元的编号也叫地址。既然根据内存单元的编号或地址找到所需的内存单元,所以通常也把这个地址称为指针。
使用指针的好处
1)为函数提供修改调用变量的灵活手段
2)让函数有多个返回值
3)可以改善某些子程序的效率
在数据传递时,如果数据块较大(比如说数据缓冲区或者较大的结构),这时就可以使用指针传递地址 而不是实际数据,既提高传输速度,又节省大量内存。
4)为动态数据结构(如二叉树、链表)提供支持
变量的存储方式:
直接存储
间接存储(通过指针操作间接完成)
3、指针变量
1)指针变量的概念
在c语言中,允许用一个变量来存放指针,这种变量称为指针变量。因此,一个指针变量的值就是某个内存单元的地址或称为某个内存单元的指针
2)指针变量的定义
一般形式:
类型说明符 *变量名;
其中,*表示这是一个指针变量,变量名即为定义的指针变量名,类型说明符表示指针变量所指向的变量的数据类型。
代码及理解:
#include <stdio.h>
int main(int argc, const char * argv[]) {
int *p;//定义了一个指针变量,变量名是p
//int表示 ,p只能存放一个int类型的变量的地址
char *p1; //定义了一个指针变量,变量名是p1
//p1只能存放一个char类型数变量的地址
return 0;
}
4、二级指针
二级指针的介绍:
如果一个指针变量存放的又是另一个指针变量的地址,则称这个指针变量为指向指针的指针变量
代码及理解:
#include <stdio.h>
int main(int argc, const char * argv[]) {
//定义一个指针变量
int *p = &a;
printf("&a = %p\n",&a);
printf("p =%p\n",p);
printf("-----------------\n");
//定义一个二级指针
//**的个数等于等级
int **p1 = &p;
printf("&p =%p\n",&p);
printf("p1 =%p\n",p1);
printf("--------------\n");
printf("*p =%d\n",*p);
//p的值, a的地址
printf("*p1 =%p\n",*p1);
return 0;
}