1. 指针的定义:
指针是一种数据类型,用来表示内存的地址。即表示内容地址的数据类型就是指针类型。
定义方式:
数据类型名* 指针变量名
eg:char* cp;
int* p; .....
由以下代码可直观了解指针的定义内容。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main() {
int a = 1024;
int* p = &a;
printf("%p\n", p); // 指针变量的内容
printf("%p\n", &a); // 变量a的地址
printf("%d\n", a); // 变量a 的值
printf("%d\n", *p); // 解引用指针
return 0;
}
2. 指针的两个重要属性:
(1)指针变量指向的内容地址;
(2)指针指向内存地址上元素的数据类型,即每个元素所占内存的大小。
3. 一种的特殊的指针——空指针 void*
该指针只有地址,没有对应内存。有多种应用,如memset函数。
同时要避免也指针的使用。
4. 指针运算
(1) 指针加(减)整数
指针加(减)整数的结果是指针当前所指向的地址加(减)该整数*内存数据类型长度。
示例:以下代码可直观了解其运算方式
# include <stdio.h>
int main() {
int a = 521;
int* p = &a;
char* q = (char*)&a;
printf("%p\n", &a);
printf("%p\n", p);
printf("%p\n", p + 1);
printf("%p\n", q);
printf("%p\n", q + 1);
return 0;
}
/运行结果如下
00DFFD94
00DFFD94
00DFFD98
00DFFD94
00DFFD95
请按任意键继续. . .
(2)指针 - 指针
其结果为地址实差值除以数据类型长度
示例如下代码:
# include <stdio.h>
int main() {
int arr[] = { 1,2,3,4,5,6 };
int* p = &arr[0];
int* q = &arr[1];
printf("%p\n", p);
printf("%p\n", q);
printf("%d\n", q - p);
return 0;
}
运行结果如下:
003DFD28
003DFD2C
1
请按任意键继续. . .
5. 指针与数组
(1)数组型指针
(2)指针数组