指针也是一种变量,是用来存放地址的。
可以间接操作变量,
NULL空地址和0是等价的
在程序执行过程中可以指向任意地址
指针变量的命名规则和其他变量的命名规则一样
指针不能与现有变量同名
指针可存放 C 语言中的任何基本数据类型、数组和其他所有高级数据结构的地址
若指针已声明为指向某种类型数据的地址,则它不能用于存储其他类型数据的地址
应为指针指定一个地址后,才能在语句中使用指针
指针是一个变量,可以在程序执行过程中改变它的值,即可以改变指针的指向。可以在某时刻指向变量x,也可以在另一时刻指向变量y
指针不初始化的危害;
初始化是指定义并赋值
#include<stdio.h>
int main()
{
int *pa;//野指针
printf("pa=%p\n",pa);
printf("*pa=%d\n",*pa);
//段错误:操作了非法的内存
*pa+=10;
return 0;
}
指针变量所占内存地址都是4个字节
指针的运算;
1.指针和指针
#include<stdio.h>
int main()
{
int a=12;
int b=34;
int *pa=&a;
int *pb=&b;
int c=pa+pb;
return 0;
}
~
两个地址相加没有意义 error
把int c=pa+pb换成int c=pa-pb不会报错。因为int c=pa-pb是表示2个地址的距离,是有意义的。
2.指针和整数的加和减就是地址的偏移
偏移量=n*sizeof(type)
&arr :整个数组的首地址 偏移量 5*sizeof(int)
&arr+1 VS &(arr+1)
&(arr+1)是不成立的,不能取地址的地址
指针与数组的等价关系
如果int *p=arr则
pa 等价于 &arr[i]
*pa 等价于 arr[0]
int *pa 存放 int 或int[]