指针

在学习指针之前,首先你得学会基本数据类型,数组,if-else,switch,for,while,do-while。
1:VC++6.0
2:vs2013
//整型
char 也可以存储整数
short
int
long
long long C99新添加的类型
//浮点型
float
double
long double
//其他的
unsigned 无符号
signed 有符号
_Bool C99新添加的
const 定义的时候设置为只读变量
//以下三个先不管
static
extern
register


#include

//刚刚已经知道了&是取地址符,那么是可以查看变量的地址
//现在又有一个和&匹配的符号,那么就是*(注意这里的*不是乘法)
//*用法很多,首先就是创建一个指针类型的变量
//那么什么是指针类型呢
//就是基本类型加上一个*创建出来的变量叫做指针变量
//那么指针变量是干嘛的呢,就是存储变量地址的
//比如A类型的指针变量可以存储A类型变量的地址
//A类型的钥匙开A类型的门
//指针变量也是有地址的
int main(void)
{
/* int* pi; //这就是一个int类型的指针变量
//这里的pi是int*类型而不是int类型
//指针其实就是地址
//什么符号是取变量地址的?&
int i;
pi = &i;//不是*pi去存储i的地址,而是pi
//pi是i的地址,*pi就是间接访问i地址里的值
//*还能拿来干嘛呢?难道只能说是创建指针类型的变量吗?
//既然我pi存储了i的地址,那么指针就可以间接的去改变i的值
i = 10;//i本身改变了
printf("i = %d\t *pi = %d\n", i, *pi);
*pi = 20;//利用指针间接改变了i的值
printf("i = %d\t *pi = %d\n", i, *pi);
//下面我们看看基本类型变量的地址和指针变量的地址
//还有指针存储的地址
printf("i的地址:%#p\n", &i);
printf("用指针打印i的地址:%#p\n", pi);
printf("指针的地址:%#p\n", &pi);
*/
//指针不能去指向多个变量地址
//* 和 &是什么东西
//*间接访问和创建指针类型的一个字符
//&取地址符
//现在结合一些自增、自减
/* int i = 10;
int* pi = &i;
//pi == &i *pi == i
//int*pi int* pi int *pi都是同一个道理
//如果我暂时不用指针来存储地址,那么我如何初始化指针呢?
//int* pi = NULL; void*
i++;//i = 11;
//(*pi)++;
//*pi++;//pi是i的地址
//i的地址是0x00000000(比如是int) pi++:0x000000004
//++*pi;*跟pi先结合,所以这里应该是:++(*pi)等价
//++i;
/*printf("pi = %#p\n", pi);
*pi++;//地址偏移4个字节(int类型)
printf("pi = %#p\n", pi);*/
/* (*pi)++;//*pi先结合,i++;
printf("*pi = %d\n", *pi);*/
//下面介绍一个关键字:const(只读)
//const int i = 10;//设定变量为只读
//int i2 = 20;
//const int* pi = &i;//设定指针变量为只读
//但是可以去改变用钥匙去开其他门
//printf("i = %d\n", i);
//++i;//i的值为只读类型,只能去读,不能去写
//(*pi)++;//间接改变i的值!
//printf("*pi = %d

\t i = %d\n", *pi, i);
//const* int p2 = &i;
//他是可以用间接访问改变变量的值,但是不能用钥匙乱开
//其他家的门
//p2 = &i2;
//const *int const p3 = &i;
//就像被关在某个空房间,什么都不能干
//感觉身体被掏空!只能读,不能改,也不能去开其他家门
//p3 = &i2;错误
//(*p3)++;错误
//int* p = (int *)0X0055F25;//0X00000010
//p是拿来存储变量的地址的!
//现在p指向了常量10(地址)
//现在的意思是p直接指向了内存0x10
//int* p = 10;可能会被翻译为p指向了内存0X10
//printf("*p = %d\n", *p);
//访问了某块不能访问的地址!
//int* p2 = 10;//基本上都是拿来存储变量地址的!
//printf("*p = %p\n", p);
//字符串(指针形式)
char* str = "时间永远也不会为谁停留";
//时这个字是数组第一个元素和第二个元素的和
//这个str指向了"时间永远也不会为谁停留"这个字符串的地址!
printf("%s\n", str);
printf("常量字符串的地址:%#p\n", &"时间永远也不会为谁停留");
printf("%p\n", str);
//*p++;地址偏移
//语法糖写法!*(str+0), *(str+1);
printf("%c%c\n", str[0], str[1]);
//*(str+0), *(str+1) *(0+str), *(1+str);
printf("%c%c\n", 0[str], 1[str]);
return 0;
}







相关文档
最新文档