C语言指针有关笔记(2019-10-11)
#include <stdio.h>
int main()
{
int a = 10;
int *b = &a; //b是指针型变量
int **c = &b; //c是指针的指针
printf("声明部分: \n");
printf("int a = 10; \n");
printf("int *b = &a; \n");
printf("int **c = &b; \n");
printf("输出部分: \n");
printf("a--> %-2d\n",a); //打印的是a的值内容
printf("&a--> %-2x\n",&a); //打印的值a的地址
printf("b--> %-2x\n",b); //打印的指针变量b的值,其值的内容为一个地址,实际为a变量的地址即&a
printf("*b--> %-2d\n",*b); //打印的是指针变量b的值所指向内存地址里面的内容,实际为a的值
printf("&b--> %-2x\n",&b); //打印的是指针变量b,这个变量本身的地址
printf("c--> %-2x\n",c); //打印的是指针变量c的值,其值的内容实际为指针变量b本身的地址即&b
printf("*c--> %-2x\n",*c); //打印的是指针变量c指向内存地址里面的内容,实际为指针变量b的值
printf("**c-> %-2d\n",**c); //打印的是指针变量c里面的指针(指针b)内容所指向的地址的内容,实际为*b的值
}
总结:
指针b(存储a变量的地址,跟变量地址打交道)
指针c(存储指针变量b的地址并不是b的值,跟指针变量地址打交道)
*c只是获取了里层指针变量b的值内容,这里只是获取指针的内容
**c才可以将里层指针变量b的值内容指向的变量内容挖出来,这里获取的是变量的内容
下面星号的操作是为了取值
对于**c可以将它分解为*(*c)
第一次先做括号里面的(*c),此时相当于提取到了b
第二次再做*b,此时就获取到了a
另外在上面基础上做了一个 “*p = 100;”的操作,见下示例以及输出图,
可以与第一张图的输出做个比较。
指针变量p,以及在将100这个数值赋值给"*p"后,其余变量的值都发生了改变,这种就是通过指针间接的把相关变量的值改变的一种方式。