指针概述
要正确使用指针, 需要认识指针。 要认识指针, 则需要先知道计算机内存是怎么被划分的, 因为指针是内存数据的快捷方式。
内存地址
计算机程序中使用的所有数据, 都必须存储在计算机的存储单元中, 并且应能从计算机的存储单元中取出。 每一个存储单元都有唯一的地址。
计算机内存被划分成安顺序编号的内存单元, 这就是地址。如果程序中定义了一个变量, 在对程序进行编译时, 系统就会给这个变量分配内存单元。
地址表示在内存中的“位置”, 对象的地址是指对象在内存中的存储位置编号。
指针变量
例子
/*
* 编写时间: 2018/7/24
* 编写作者: 流光飞霞
* 程序功能: 指针变量的声明
* 程序版本: V1.00
**/
# include <stdio.h>
int main()
{
int i = 88;
int * p; /* int *代表只能存放整型地址的变量 p是变量名 */
p = i; /* 把p指向i */
printf("%d\n", &i);
printf("%d\n", p);
return 0;
}
&是取地址符在scanf(); 已经用过了所以第一个输出结果是地址, 第二个输出结果是把p指向了i所以是变量i的值, 也就是p指向谁就是谁的值。
例子_1
/*
* 编写时间: 2018/7/24
* 编写作者: 流光飞霞
* 程序功能: 指针变量的声明
* 程序版本: V1.00
**/
# include <stdio.h>
int main()
{
int i = 88;
int * p; /* int *代表只能存放整型地址的变量 p是变量名 */
p = &i;
printf("%d\n", &i);
printf("%d\n", p); /**/
return 0;
}
p = &i; 就是p指向了i的地址
错误例子
/*
* 编写时间: 2018/7/24
* 编写作者: 流光飞霞
* 程序功能: 错误的例子
* 程序版本: V1.00
**/
# include <stdio.h>
int main()
{
double d = 88.00;
int * p; /* int *代表只能存放整型地址的变量 p是变量名 */
p = d; /* 虽然不能指向 d 不过可以指向 d 的地址 */
printf("%d\n", &d);
printf("%d\n", p); /**/
return 0;
}
/*
*******************************************
error: incompatible types in assignment
*******************************************
*/
为什么不能指向d呢, 因为d是double类型, int *只能存放整型变量的地址!
如何修改
/*
* 编写时间: 2018/7/24
* 编写作者: 流光飞霞
* 程序功能: 错误的例子_改正
* 程序版本: V1.00
**/
# include <stdio.h>
int main()
{
int d = 88; /* 第一种方法把数据类型改成整型 */
int * p;
p = &d; /* 第二种方法 指向p的地址 */
printf("%d\n", &d);
printf("%d\n", p); /**/
return 0;
}