简介
指针指向的是内存地址
地址就是指针
二级指针指的还是地址,只是指向的地址变了(变为一级指针)
指针的长度
指针的长度:打印各种指针的长度,所有指针的长度为4个字节
#include <stdio.h>
#include <stdlib.h>
/**
指针的长度 是4个字节(能够传任何类型的地址)
*/
main(){
int* iPoint;
char* cPoint;
printf("iPoint的长度=%d\n",sizeof(iPoint));
printf("cPoint的长度=%d\n",sizeof(cPoint));
system("pause");
}
理解一张图(十分重要)
*address4(1个 * 的时候相当于取地址(address4存放地址4000H)对应的值(address3中的值 3000H),相当于分析图中 3000H)
(address4存放地址4000H对应的值3000H)
**address4(2个 ** 的时候相当于取地址(address3存放地址3000H)对应的值(address2中的值 2000H),相当于分析图中 2000H)
(address3存放地址3000H对应的值2000H)
***address4(3个 *** 的时候相当于取地址(address2存放地址2000H)对应的值(address1中的值 1000H),相当于分析图中 1000H)
(address2存放地址2000H对应的值1000H)
****address4(4个 **** 的时候相当于取地址(address1存放地址1000H)对应的值(int i 中的值 100),相当于分析图中 100)
(address1存放地址1000H对应的值100)
理解多级指针
#include <stdio.h>
#include <stdlib.h>
/**
多级指针
指针指向的是内存地址
地址就是指针
*/
main(){
// 定义一个int类型的变量 i,并且赋值为100;
int i = 100;
// 定义一个int类型的一级指针变量 address1,并且把 i的地址赋值给它
int* address1 = &i;
// 定义一个int类型的二级指针变量 address2,并且把 address1对应的地址赋值给它
// 二级指针指的还是地址,只是指向的地址变了(变为一级指针)
int** address2 = &address1;
// 定义三级指针
int*** address3 = &address2;
// 定义四级指针
int**** address4 = &address3;
// 多级指针取值 ****address4得到的值是100
printf("****address4的值=%d\n",****address4);
system("pause");
}
运行结果:
(address4存放地址4000H对应的值3000H)
(address3存放地址3000H对应的值2000H)
(address2存放地址2000H对应的值1000H)
(address1存放地址1000H对应的值100)
修改多级指针的值
#include <stdio.h>
#include <stdlib.h>
/**
多级指针
指针指向的是内存地址
地址就是指针
*/
main(){
// 定义一个int类型的变量 i,并且赋值为100;
int i = 100;
// 定义一个int类型的一级指针变量 address1,并且把 i的地址赋值给它
int* address1 = &i;
// 定义一个int类型的二级指针变量 address2,并且把 address1对应的地址赋值给它
// 二级指针指的还是地址,只是指向的地址变了(变为一级指针)
int** address2 = &address1;
// 定义三级指针
int*** address3 = &address2;
// 定义四级指针
int**** address4 = &address3;
// 取的是一个地址
printf("***address4的地址=%#x\n",***address4);
// 多级指针取值 ****address4得到的值是100
printf("****address4的值=%d\n",****address4);
// *address4(一个 * 的时候相当于取地址对应的值,相当于分析图中 3000H)
// 进行值的修改,与一颗 * 的指针是类似的原理
****address4 = 2000;
printf("****address4的值=%d\n",****address4);
system("pause");
}
运行结果:
三级指针
同样,如果输出三级指针 ***address3时,值与上面运行结果一样
#include <stdio.h>
#include <stdlib.h>
/**
多级指针
指针指向的是内存地址
地址就是指针
*/
main(){
// 定义一个int类型的变量 i,并且赋值为100;
int i = 100;
// 定义一个int类型的一级指针变量 address1,并且把 i的地址赋值给它
int* address1 = &i;
// 定义一个int类型的二级指针变量 address2,并且把 address1对应的地址赋值给它
// 二级指针指的还是地址,只是指向的地址变了(变为一级指针)
int** address2 = &address1;
// 定义三级指针
int*** address3 = &address2;
// 定义四级指针
// int**** address4 = &address3;
// 取的是一个地址
printf("***address3的地址=%#x\n",***address3);
// 多级指针取值 ****address4得到的值是100
printf("***address3的值=%d\n",***address3);
// *address4(一个 * 的时候相当于取地址对应的值,相当于分析图中 3000H)
// 进行值的修改,与一颗 * 的指针是类似的原理
****address4 = 2000;
printf("**address3的值=%d\n",***address3);
system("pause");
}
运行结果: