指针的基本概念
指针是C语言的一种数据结构,使用指针可以对内存地址进行操作。指针是一个程序实体所占用内存空间的首地址。
指针变量:
指针本身也是一个数据,可以使用一个变量来保存,这个变量叫做指针变量。指针变量的格式:
数据类型 *变量名;
例如:
int *p;
*符号前的int说明了从指针变量中地址开始的连续内存空间大小,即改数据类型占用的字节数。
对指针的理解:
p ->数据类型是(int *),P中保存的是地址。
*p ->数据类型是int,*P中保存的是int数据。
指针变量赋值、使用:
指针变量被定义后,必须赋值后才能使用。假如某个整形数据的首地址是0x4460 0000,要赋值给p1,操作为:
int *p1;//定义指针变量
p1 = (int *)0x46600000;//将指针赋值给p1
或者:
int *p1 = (int *)0x46600000;
其中(int *)是强制类型转换,以便通知编译器0x46600000是一个整形数据的首地址。
#include "stdio.h"
int main()
{
int *p;//定义一个整形指针
p = (int *)0x20000000;//将常量0x20000000强制转化为整形地址,用p指向它
*p = 1234;//向该地址写入数据
printf("%d\n",*(int *)0x20000000);//输出0x20000000地址的数据
return 0;
}
另一种写法:
#include "stdio.h"
int main()
{
*(int *)0x20000000= 1234;//将0x20000000强制转化为整形地址(int *)0x20000000,再将1234写入到该地址指向的内容
printf("%d\n",*(int *)0x20000000);//输出该地址的内容
return 0;
}
指针的取值和取址:
使用取址运算符:&
int a;
int *p;
p = &a;
或者
int a;
int *p = &a;
验证:
编写下列代码:
#include <stdio.h>
int main()
{
int *p1;
int a = 5;
p1 = &a;
printf("*p1=%d\n",*p1);
printf("p1=%d\n",p1);
getchar();
return 0;
}
Comments | NOTHING