指针
2018-05-02 本文已影响0人
RicherYY
指针式C语言的灵魂,我简单写一下自己的见解
指针(pointer)简介
指针是一个值为内存地址的变量
变量就是一个内存地址
int *ptr_year取地址
ptr_year = &year
就是把int year的地址赋给了ptr_year
我们就说ptr_year指向了变量
指针的基本用法
数据类型 * 指针变量名
定义指针的时候最好加ptr或者p
int ptr_num = NULL; //指针初始值为空,不指向任何地址
&取地址符
指针3.PNG相当于取num的地址赋给了ptr_num变量
代码练习
int main()
{
int num = 9;
int * ptr_num = #
printf("num的变量地址是;%p\n",ptr_num); //%p表示打印指针类型数据
间接运算符*
指针4.PNG相当于根据*ptr_num的地址所对应的空间直接去修改
相当于操控这个空间 这个地址对应的值直接修改
抽象一点儿讲指针就相当于一个名片(*)就是取这个地址的值
&是取地址,千万不要混淆
nt main()
{
int num = 9;
int * ptr_num = #
printf("num的变量地址是;%p\n",ptr_num); //%p表示打印指针类型数据
printf("ptr_num对应的值为;%d\n",*ptr_num); //取ptr_num所对应的值
星号是取值的意思
代码练习
int main()
{
int num = 9;
int * ptr_num = #
printf("num的变量地址是;%p\n",ptr_num); //%p表示打印指针类型数据
//使用指针修改变量值
*ptr_num = 9999; //找到这个地址所对应的空间,然后把这个空间的值修改成9999
printf("修改之后的值为;%d",*ptr_num); //打印num表示相同值
通过指针的地址找到原指针对应的值
int main()
{
int num = 9;
int * ptr_num = #
int ** ptr_num2 = &ptr_num; //这里需要定义变量
printf("num的变量地址是;%p\n",ptr_num); //%p表示打印指针类型数据
printf("ptr_num对应的值为;%d\n",*ptr_num); //取ptr_num所对应的值
//使用指针修改变量值
*ptr_num = 9999; //找到这个地址所对应的空间,然后把这个空间的值修改成9999
printf("修改之后的值为;%d\n",*ptr_num); //打印num表示相同
printf("指针的内存地址;%p\n",ptr_num2);
//如何通过指针的指针地址,访问到原指针所对应的内存空间?
printf("\n原空间num所对应的值为;%d\n",**ptr_num2);
练习
int main()
{
int num1 = 1024;
int num2 = 2048;
int * ptr1;
int * ptr2;
ptr1 = &num1;
ptr2 = &num2;
printf("num1的值是;%d\tnum1的内存地址是;%p\n",num1,ptr1);
printf("num2的值是;%d\tnum2的内存地址是;%p\n",num2,ptr2);
//将变量1的值赋给变量2
//*ptr2 = *ptr1;等价写法 num1 = num2
ptr2 = ptr1; //ptr1和ptr2的地址都指向num1的值
printf("重新赋值以后结果\n");
printf("num1的值是;%d\tnum1的内存地址是;%p\n",num1,ptr1);
printf("num2的值是;%d\tnum2的内存地址是;%p\n",num2,ptr2);
*ptr2 = 11111;
printf("重新赋值以后结果\n");
printf("num1的值是;%d\tnum1的内存地址是;%p\n",num1,ptr1);
printf("num2的值是;%d\tnum2的内存地址是;%p\n",num2,ptr2);
指针5.PNG