指针可以存放变量的地址编号
在程序中,引用变量的方法
-
直接通过变量的名称int a;a=100;
-
可以通过指针变量来引用变量int *p; //在定义的时候,*不是取值的意思,而是修饰的意思,修饰p是个指针变量p=&a; //取a的地址给p赋值,p保存了a的地址,也可以说p指向了a*p= 100; //在调用的时候*是取值的意思,*指针变量 等价于指针指向的变量
注:指针变量在定义的时候可以初始化
int a;
int *p=&a;//用a的地址,给p赋值,因为p是指针变量
指针就是用来存放变量的地址的。
*+指针变量, 就相当于指针指向的变量
指针变量只能保存开辟好空间的地址,不能随意保存地址
#include <stdio.h>
int main(int argc, char *argv[])
{
int *p1,*p2,temp,a,b;
p1=&a;
p2=&b;
printf("请输入:a b的值:\n");
scanf("%d %d", p1, p2);//给p1和p2指向的变量赋值
temp = *p1; //用p1指向的变量(a)给temp赋值
*p1 = *p2; //用p2指向的变量(b)给p1指向的变量(a)赋值
*p2 = temp;//temp给p2指向的变量(b)赋值
printf("a=%d b=%d\n",a,b);
printf("*p1=%d *p2=%d\n",*p1,*p2);
return 0;
}
执行结果
扩展:
对应类型的指针,只能保存对应类型数据的地址,
如果想让不同类型的指针相互赋值的时候,需要强制类型转换
#include <stdio.h>
int main(int argc, char *argv[])
{
int a=0x1234,b=0x5678;
char *p1,*p2;
printf("%#x %#x\n",a,b);
p1=(char *)&a;
p2=(char *)&b;
printf("%#x %#x\n",*p1,*p2);
p1++;
p2++;
printf("%#x %#x\n",*p1,*p2);
return 0;
}
执行结果
注意:
1:*+指针 取值,取几个字节,由指针类型决定的指针为字符指针则取一个字节,
指针为整型指针则取4个字节,指针为double型指针则取8个字节。
2:指针++ 指向下个对应类型的数据
字符指针++ ,指向下个字符数据,指针存放的地址编号加1
整型指针++,指向下个整型数据,指针存放的地址编号加4