-
c指针是什么?:指针是个变量,用来存放单元(一个单元的大小是一个字节)的地址,所以也说指针就是地址。
-
指针类型:决定了指针进行解引用操作的时候,能访问空间的大小
-
解引用操作:如 *p = 0;
如:int* p;*p能够访问4个字节
char* p;*p能够访问1个字节
double* p;*p能够访问8个字节
指针(+,-)
- 指针类型决定了指针走一步走多远(指针的步长)
如下:int类型能访问4个字节(跳过一个int字符,后同)所以增加4,而char类型能访问1个字节所以增加1
示例:
#include<stdio.h>
int main()
{
int a = 0X11223344;
int* pa = &a;
printf("%p\n", pa);
printf("%p\n", pa+1);
printf("========\n");
char* pc = &a;
printf("%p\n", pc);
printf("%p\n", pc+1);
return 0;
}
示例结果:
006FF764
006FF768
========
006FF764
006FF765
指针初始化(NULL)
#include<stdio.h>
int main()
{
int* p = NULL;//NULL-用来初始化指针
}
指针-指针(相减)
- 指针-指针:得到的是指针之间的元素个数
- 指针相减两个指针指向的是同一块空间
例:
#include<stdio.h>
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
printf("%d\n", &arr[9] - &arr[0]);
return 0;
}
结果:9
二级指针
- 用来存放一级指针变量的地址
指针数组
- 指针数组:存放指针的数组(如:int* arr[3] = {&a,&b,&c}😉
示例;
#include<stdio.h>
int main()
{
int a = 10;
int b = 20;
int c = 30;
int* arr[3] = { &a,&b,&c };//通过指针数组来存放a,b,c的地址
int i;
for (i = 0; i < 3; i++)
{
printf("%p\t", arr[i]);
}
printf("\n");
for (i = 0; i < 3; i++)
{
printf("%d\t", *(arr[i]));//通过解引用操作找到a,b,c的值并输出
}
return 0;
}
示例结果:
00FDFB88 00FDFB7C 00FDFB70
10 20 30