指针的声明与定义
指针是一种数据类型,就像int 装整型数据,float装浮点型数据,指针装地址数据。
int*p;//
形式:类型+*+变量名组成
指针指向空间
赋值与初始化
int a=12;//赋值
int*p;//赋值
p=&a;//赋值
int*p=&a;//初始化
printf("%d,%d,%d",&p,p,&a);
通过地址间接操作所指向的空间
读、写、取址
int *p=&a;//*p和下面的*p不一样,第一个是标记作用,代表它是指针
//读
printf("%d,%d,%d",p,*p,a);//第二个表示内存操作运算符(可以读写取)
//写
*p=145;//a也变成145
printf("%d,%d,%d",p,*p,a);
//取地址
printf("%p,%p,%p",p,*p,&a);
p指向一个变量,*p就是变量本身
p是指向空间的地址,&p是p变量自己的地址
类型决定内存操作
double b=123.123;
int *p1=&b;
printf("%lf,%lf\n",*p1,b);
这么写会出问题应该是:
double b=123.123;
double *p1=&b;
printf("%lf,%lf\n",*p1,b);
一个小范围指针可以指向大字节的空间,并且操作不异常,虽然结果有问题
但大范围指针不可以指向小范围空间,且操作异常,结果有问题
二级指针
定义
int a=12;
int *p=&a;
int* *p1=&p
如
int a=12;
int *p=&a;
//二级指针
int* *p1=&p;//二级指针装1级指针地址
int** *p2=&p1;//三级指针装2级指针地址
system("pause");
return 0;
指针变量有自己的地址
int *p1=p只能值传递,不能取p地址
应该是nt *p1=&p
二级指针与数组无关
二级指针使用
int main(void)
{
int a=12;
int *p=&a;
int* *p1=&p;
printf("%d,%d,%d,%d,%d,%d\n",&a,p,&p,p1,*p1,&p1);
system("pause");
return 0;
}