指针的概念:指针就是一个变量,用来存放内存单元的地址.(存放在指针中的值都被当成地址处理)
指针的大小: ①.在32位的机器上,地址是32个0或者1组成二进制序列,那地址就得用4个字节的空间来存储,所以一个指针变量的大小就是4个字节.
②.在64位的机器上,一个指针变量的大小是8个字节.
指针的类型:
char* pc = NULL
int* pi = NULL
short* ps = NULL
long* pl = NULL
float* pf = NULL
double* pd = NULL
注意:char* 类型的指针是为了存放char类型变量的地址,int* 类型的指针是为了存放int类型变量的地址,以此类推;
********************************************************************************************************************************
指针运算:
①.指针+-整数:
注意:指针的类型决定了指针向前或者向后走多少字节.
②.指针 - 指针
③.指针的关系运算
指针的解引用: 指针的类型决定了对指针解引用的时候有多大的权限(能操作几个字节).
比如:char* 的指针解引用就只能访问一个字节,而int* 的指针解引用就能访问4个字节.
字符指针:
这里str3和str4指向的是同一个常量字符串
C/C++ 会把常量字符串存储到单独的一个内存区域
当几个指针指向同一个字符串,他们实际会指向同一块内存
但是用相同的常量字符串去初始化不同的数组的时候就会开辟出不同的内存块
********************************************************************************************************************************
指针数组:是一个存放指针的数组
例:int* arr3[5]; //整形指针的数组
char* arr2[4]; //一级字符指针的数组
char** arr3[5]; //二级字符指针的数组
数组指针: 是指指向数组的指针.
例:int (*p)arr[10];
解释:p先和*结合,说明p是一个指针变量,然后指着指向的是一个大小为10个整形的数组.所以p是一个指针,指向一个数组,叫做数组指针.
********************************************************************************************************************************
&数组名 VS 数组名
&(数组名) 的意义:
1.表示的是数组的地址,而不是数组首元素的地址;
2.数组的地址+1,跳过整个数组的大小.
数组名的意义:
1.表示的是数组的首元素地址;
2.sizeof(数组名),这里的数组名表示整个数组,计算的是整个数组的大小;
3.&数组名,这里的数组名表示整个数组,取出的是整个数组的地址;
4.除此之外所有的数组名都表示首元素的地址.
二级指针:
变量a的地址存放在pa中,pa的地址存放在ppa中.pa是一级指针,而ppa是二级指针.