#include <stdio.h>
int main()
{
//显示变量的地址
//指针是一个特殊的变量,存储的地址
int i = 0;
printf("0x%p
",&i);
//上面中的%p,指的是printf中以输出地址的占位符
//&i,表示取指针,返回一个指向i的int类型指针,它存储的值是i的地址
{
printf("%i
",&i);
//%i ,表示以十进制输出地址
//会报两个警告,说类型不匹配
//warning: format '%i' expects argument of type 'int', but argument 2 has type 'int *' [-Wformat=]
}
return 0;
}
#include <stdio.h>
int main()
{
int i=0;
int *p; //声明一个指针变量,* 用来说明该变量是一个指针
p=&i; //把i的地址赋值给指针p,也就是说p存了指向i的地址
printf("&i=%p
",&i);
printf("p=%p
",p); //&i=000000000061FE14
//p=000000000061FE14
return 0;
}
#include <stdio.h>
int main()
{
//通过指针进行读取
int i = 9;
int *p;
p = &i;
printf("%d
",*p); // * 指针运算符,指的是取它后面指针所指向的值 p是指针,存储着指向i的地址
return 0;
}
#include <stdio.h>
int main()
{
//通过指针对变量进行修改
int i = 8;
int *p = &i;
printf("i=%d
",i);
printf("*p=%d
",*p);
*p=7;
printf("i=%d
",i);
printf("*p=%d
",*p);
i=6;
printf("i=%d
",i);
printf("*p=%d
",*p);
return 0;
}
i=8
*p=8
i=7
*p=7
i=6
*p=6
#include <stdio.h>
int main()
{
//野指针
int *p;
printf("%p",p);
return 0;
}
#include <stdio.h>
int main()
{
//野指针
int *p;
printf("%p",p);
*p=0;
int *pInt=0;
return 0;
}
#include <stdio.h>
int main()
{
//更新指针保存的地址
int i=10;
int j=20;
int *p=&i;
printf("i的地址:%p
",&i);
printf("j的地址:%p
",&j);
printf("p保存的地址:%p
",p);
p=&j;
printf("更改后地址
");
printf("i的地址:%p
",&i);
printf("j的地址:%p
",&j);
printf("p保存的地址:%p
",p);
return 0;
}
#include <stdio.h>
int main()
{
//指针自身的地址
int i=10;
int *p=&i;
printf("p的地址:%p
",&p);
printf("p保存的地址:%p
",p);
printf("p指向的变量的值:%d
",*p);
return 0;
}
#include <stdio.h>
int main()
{
//指针的加减运算
int i=10;
int *p=&i;
printf("指针p保存的地址为%p
",p);
p++;
printf("自加后,指针p保存的地址为%p
",p);
p--;
printf("自减后,指针p保存的地址为%p
",p);
p-=2;
printf("减2后,指针p保存的地址为%p
",p);
return 0;
}
#include <stdio.h>
int main()
{
//指针的赋值运算
int i=10;
int j=20;
int *p1=&i;
int *p2=&j;
printf("p1=%p p2=%p
",p1,p2);
p1=p2;
printf("p1=%p p2=%p
",p1,p2);
return 0;
}
#include <stdio.h>
int main()
{
//指针的相减运算
int i=10;
int j=20;
int *p1=&i;
int *p2=&j;
printf("p1=%p
",p1);
printf("p2=%p
",p2);
*p1=p1-p2;
printf("p1-p2=%d
",*p1);
return 0;
}
#include <stdio.h>
int main()
{
//指针的相减运算
int i=10;
int j=20;
int *p1=&i;
int *p2=&j;
printf("p1=%p
",p1);
printf("p2=%p
",p2);
if(p1>p2)
printf("p1的地址p2地址大
");
else
printf("p2的地址比p1地址大
");
return 0;
}
#include <stdio.h>
int main()
{
//指针的类型
char ch;
int i;
char *pCh=&ch;
int *pInt=&i;
printf("pCh保存的地址为:%p
",pCh);
pCh++;
printf("自加后,pCh保存的地址为:%p
",pCh);
printf("pInt保存的地址为:%p
",pInt);
pInt++;
printf("自加后,pInt保存的地址为:%p
",pInt);
return 0;
}
#include <stdio.h>
int main()
{
//常量指针
int i=0;
int *const p=&i;
//p++;//指针不可修改
*p=1;
i++;
printf("i=%d
",*p);
return 0;
}
#include <stdio.h>
int main()
{
//指向常量的指针
int i=0;
const int *p=&i;
printf("*p=%d
",*p);
p++;
//*p=1; 指针指向的是常量,不能修改
printf("*p=%d
",*p);
return 0;
}
#include <stdio.h>
int main()
{
//指向常量的常指针
int i=0;
const int *const p=&i; //int const *p
printf("*p=%d
",*p);
//p++; //指针是常量,不能修改
//*p=1; //指针指向的是常量,不能修改
printf("*p=%d
",*p);
return 0;
}
#include <stdio.h>
int main()
{
//指向常量的常指针
int i=0;
int const *p=&i; //int const *p
printf("*p=%d
",*p);
p++; //
//*p=1; //指针指向的是常量,不能修改
printf("*p=%d
",*p);
return 0;
}