1-认识c指针
1.指针和内存
c程序在编译后,会以三种形式使用内存
1静态/全局内存
静态声明的变量分配在这里,全局变量也使用这部分内存。这些变量在程序开始运行时分配,直到程序终止时才会消失
2.自动内存
这些变量在函数内部声明,并且在函数调用时才被创建。他们的作用域局限于函数内部,而且生命周期限制在函数的执行时间内。
3.动态内存
内存分配在堆上,可以根据需要释放,而且直到释放才会消失。指针引用分配的内存,作用域限与引用内存的指针。
如何阅读指针说明
1 const int *ptr; 2 #代码解读 3 1.ptr 是有个变量 4 2.ptr 是一个指针变量 5 3.ptr是一个指向整型的指针变量 6 4.ptr是一个指向常数常亮的指针变量
注意:指针变量所对应的是地址,而整型变量存放的是某个地址上数据
用间接引用操作符(*)接引指针
1 int num = 5; 2 int *ptr = # 3 printf("%d\n",*ptr); 4 #指针的接引 *ptr
我们也可以把接引操作符的结果用作左值。术语左值是指赋值操作符左边的操作数,所有左值都必须可以修改,因为他们会被赋值。
null的概念
任何时候都不能对NULL指针进行接引,因为它并不包含合法地址
0的含义可能随着代码的不同而含义不同
1 int num = 9; 2 int *ptr = 0;#此时的0为NULL 3 *ptr - 0;#此时的0为常数0
指针操作符
* 用来声明指针
* 用来解引指针
-> 指向指针
+ 用于指针做加法
- 用于指针做减法
== != 比较两个指针
> < >= <= 比较两个指针
1 int vector = {1,2,3} 2 int * ptr = vector; 3 printf("%d\n",*ptr); 4 #输出的值为1 5 ptr += 1; 6 printf("%d\n",*ptr); 7 ptr += 1; 8 printf("%d\n",*ptr); 9 #输出的值为1 10 ptr += 1; 11 #输出的值为1
每次的指针加一,地址就加4
指针做减法
1 int vector = {28,41,7}; 2 int *ptr = vectoe + 2; 3 printf("%d\n",*ptr); 4 #打印出的值是7; 5 ptr --; 6 printf("%d\n",*ptr); 7 #打印出的值是41;
ptr的每次减一,地址都会向前移动四个字节
指针相减
两个指针相减会的到两个指针的地址上的差值,可以判断数组中的元素顺序。
笨鸟先飞