标签:
变量类型 *变量名; 如:int *p;
1.指针变量只能存储地址;
2.指针就一个作用,能够根据一个地址值,访问对应的存储空间;
3.指针变量p前面的int,代表p只能指向int类型的数据;
在64位编译器中,指针变量都是占用8个字节,但是为什么还要分为:char *p; int *p;等,是因为在取值时,*p会从p存储的地址开始,取一定的字节(如:int就会从p所存储的地址开始向下4个字节)
int *p; // 定义了一个指向int类型数据的指针变量p
int a = 90; // 定义了一个int类型的数据a = 90
p = &a; // &a :取得变量a的地址,并且赋值给指针变量p
*p = 10; // 对p所指向的存储空间赋值(*)
解析:a = 90 --> 10;
int *p; 中的*和*p = 10;中的*意思是不一样的;
int *p;中的*代表一个指针变量(标志)
*p = 10;中的*代表对p指向的存储空间进行赋值
// 不建议这样写 int *p 只能指向int类型的数据
// 警告: warning: incompatible pointer types assigning to ‘int *‘ from ‘double *‘ [-Wincompatible-pointer-types]
int *p;
double a = 10.0;
p = &a;
// 指针变量只能存储地址
// 警告(warning: incompatible integer to pointer conversion assigning to ‘int *‘ from ‘int‘ [-Wint-conversion])
int *p;
p = 200;
// 指针变量未经过初始化,不要拿来间接访问其指向的存储空间(不明确)
// 没有警告、输出0
int *p;
printf("%d\n", *p);
// 定义变量时的*仅仅是一个象征,没有其他特殊含义
int a = 9;
int *p = &a; // 定义变量时的*仅仅是一个象征,没有其他特殊含义
// *p = &a; // 不正确的写法
// 报警(warning: incompatible pointer to integer
conversion assigning to ‘int‘ from ‘int *‘; remove & [-Wint-conversion])
p = &a;
*p = 20; // 这里的*的作用:访问(赋值)指针变量p指向的存储空间
printf("%d\n", a);
标签:
原文地址:http://www.cnblogs.com/unique-ios/p/4268999.html