一.&的使用
int a=1;
printf("%d\n",a);
printf("%d\n",&a);
在这个程序中,输出结果是不同的,因为&a表示a所在的地址
二. &与*
&:取变量的地址
*:按照指向关系访问所指向的对象(解引用)
int a;
int* p ;
p = &a;
printf("%p\n", p);
printf("%p\n", &a);
两函数输出相同,表示p存放了a的地址
三.*与**
*是一级指针,**是二级指针
int a ;
int* p ;
p = &a;
int** q ;
q = &p;
printf("%d\n", p);
printf("%d\n", q);
表示p中存放了a的地址,q存放了p的地址,即a的地址的地址
同理, ***等 也是如此
四.指针与数组
数组变量是特殊的指针,数组变量本身表达地址
int a[] ⇔ int* const a
#include<stdio.h>
int main()
{
int i = 1;
int a[5] = { 1,2,3,4,5 };
int* p = &a[i];
for (i = 1;i <= 5;i++)
{
printf("%p\n", p);
p += i;
}
return 0;
}
int main()
{
int i = 1;
int a[5] = { 1,2,3,4,5 };
for (i = 1;i <= 5;i++)
{printf("%p\n", &a[i]);}
return 0;
}
五.NULL指针
NULL指针是特殊的指针变量,表示不指向任何东西
int main()
{
int* p = NULL;
printf("p的地址为%p\n", p);
return 0;
}