• 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