指针 | Personal Blog

指针

指针的定义

指针是存放变量地址的变量

指针的使用

1.声明

如同其他变量一样,指针最开始也需要被声明。 指针的数据类型是其指向的内存中存放数据的数据类型

int *p;        // 声明一个 int 类型的指针 p
char *p        // 声明一个 char 类型的指针 p
int *arr[10]   // 声明一个指针数组,该数组有10个元素,其中每个元素都是一个指向 int 类型对象的指针
int (*arr)[10] // 声明一个数组指针,该指针指向一个 int 类型的一维数组
int **p;       // 声明一个指针 p ,该指针指向一个 int 类型的指针
void *p;       //void表示此时不知道指针指向的内存中的数据类型,之后可以将其他任何类型的指针直接赋值给它

*是一个一元运算符,表示将访问此指针指向的对象

2.初始化

指针在被声明后需要被初始化,也就是为指针分配一个地址;当指针没有被分配地址或原先指向的对象被删除时,编译器将报错

1
2
3
4
5
6
7
8
//方法1:使指针指向现有的内存
int x = 1;
int *p = &x;  // 指针 p 被初始化,指向变量x,其中取地址符&用于产生操作数内存地址

// 方法2:动态分配内存给指针
int *p;
p = (int *)malloc(sizeof(int) * 10);// malloc 函数用于动态分配内存,此处表示分配10个int型存储单元给p
free(p);// free 函数用于释放一块已经分配的内存,常与 malloc 函数一起使用,要使用这两个函数需要头文件 stdlib.h free函数在一个完成了任务的子函数的末尾使用,节约内存空间

3.指针与结构体

有这样一个结构体:

1
2
3
4
5
6
struct                   //匿名结构
{
   int linux;
   char windows[MAX];    //假设MAX已被定义 #define MAX 10
}Ronz;
ptd=&Ronz;

此时我想表示结构模板中的成员linux。

成员运算符 .

我就可以这样用:Ronz.linux

间接成员运算符 ->

或者:ptd->linux

效果相同