目录
一.指针
重要的是区分指针变量,变量的地址,和地址中存放的数据。
指针
:内存中位置的
地址
指针变量
:里面的数据内容是指向内存中某一位置的地址。
一般把指针与指针变量统称为指针。
指针变量的定义:
如:int *a;//表示a是一个整数型指针变量,里面的数据看成是一个地址。这个地址指向int类型变量的地址
如:char *c;//表示c是一个字符型指针变量,里面的数据看成是一个地址。这个地址指向char类型变量的地址
二. 指针运算符
取地址运算符&:如&x,表示x变量的地址。
指针运算符 *:
或称为指向运算符,间接访问运算符(即通过指针来找到地址然后读取该地址下实际保存的内容)
注意区分int*a;只是说明这个变量a是个指针变量,然后给他一个地址;
而在用时如*a表示代表了这个指针指向地址下的内容。
即用 *a来表示其指向地址下的实际内容。而a是表示是地址。
三.指针变量的赋值
对变量值的改变归根到底是改变实际地址中保存的内容
int a = 23;
int *p = &a;//定义一个指针变量a,其指向地址是变量a的地址
printf("a的实际值= %d\n", a);//输出23
printf("指针变量p指向的值= %d\n", *p);//这里*p表示是指向变量a地址中的内容,即与a内容一样输出23。
*p = 89;//若改变该地址下的内容,判断a的值是否会变?
printf("a值会变吗?= %d\n", a);//输出89,因为该指向a地址中实际内容变了,故a的值变成89
四. 指针变量地址改变
若指针地址改变了。则其指向地址对应的内容也改变了
int a = 23;
int b = 34;
int *p = &a;
printf("a的实际值= %d\n", a);
printf("b的实际值= %d\n", b);
printf("开始时指针变量p指向的值= %d\n", *p);//输出23,因为*p是指向a的,
p = &b;//改变指针变量的值,即指向的地址值。看是否会指向b
printf("地址改变后指针变量p指向的值= %d\n", *p);//输出34,证明实际指向地址改变了。
五.指针与数组
指针在处理连续地址的情况下很有作用:如数组
char *p;//定义一个字符指针变量p
char school[] = "ABCDE";
printf("school= %s\n",school);//输出ABCDE
p = &school[0];//指向字符数组的第一个字符地址
printf("p指向字符串= %c\n", *p);//输出第一个字符A
p = p + 1;//将变量地址加1,观察地址指向的元素是否会变
printf("p地址值加1= %c\n", *p);//输出第二个字符B
p = p + 1;//在将变量地址加1,观察地址指向的元素是否会变
printf("p地址值加1= %c\n", *p);//输出第二个字符C
版权声明:本文为mcu2018原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。