指针(指针是什么,指针和指针的类型)

指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向(Pointed to)存在电脑存储器中另一个地方的值。也就是通过地址可以找到所需的变量单元,可以说,地址指向该变量单元。
举例说明:

	#include <stdio.h>
	#include <stdlib.h>
	int main(){
		int i = 10;
		int* p = &i;
		//int*是这个p的类型
		printf("%d\n",*p);
		//这里的*是间接访问操作符(先找到地址,再根据地址找到数)
		printf("%p\n",p);
		//%p打印一个无符号的十六进制整数
		//注意%p专门用来打印地址,高位会打印0,而%x高位的0会省略
		system("pause");
		return 0;
	}

总结一下,其实指针就是变量,用来存放地址的变量(存放在指针中的值都当成地址处理)

		#include <stdio.h>
		#include <stdlib.h>
		int main(){
			int i = 10;
			int* p = &i;
			printf("%d\n",sizeof(p));
			//32位系统上一个指针变量占4个字节
			//64位系统上一个指针变量占8个字节
			system("pause");
			return 0;
	}

我们都知道,变量有不同的类型,整型,浮点型等等。那指针有没有类型呢?其实是有的!比如

int num = 10;
p = &num;

我们需要将num的地址(&num)保存到p中,我们知道p就是一个指针变量,那它的类型是怎样的?接下来我们给指针变量相应的类型:

char* *pc = NULL;
int* *pi = NULL;
short* *ps = NULL;
long* *pl = NULL;
float* *pf = NULL;
double* *pd = NULL;

不难看出,指针类型的定义方式就是type + *。其实上面代码中char*就是为了存放char类型变量的地址,short*就是为了存放short类型变量的地址。其他同样。
来看一个实例:

#include <stdio.h>
#include <stdlib.h>
int main(){
	int num = 10;
	int* p = &num;
	char* pc = (char*) &num;
	printf("%p\n",p);
	printf("%p\n",p + 1);
	printf("%p\n",pc);
	printf("%p\n",pc + 1);
	system("pause");
	return 0;
}

在这里插入图片描述
从结果中我们不难看出,指针的类型决定了指针向前或者向后走一步有多大距离。
这里我们在使用指针时要注意,代码不能写成下面这样:

int* p = 10;
printf("%d\n",*p);
//这样程序会崩溃,属于C语言未定义行为

关于指针的解引用

#include <stdio.h>
#include <stdlib.h>
int main(){
	int n = 0x11223344;
	char* pc = (char*) &n;
	*pc = 0x55;
	printf("%x\n",n);
	system("pause");
	return 0;
}

结果如下图所示:
在这里插入图片描述
要注意指针的类型决定了,对指针解引用的时候能有多大权限(能操作几个字节)。比如说char的指针解引用就只能访问一个字节,但是int的指针解引用就能访问四个字节。比如同样的程序修改为下面这样:

	#include <stdio.h>
	#include <stdlib.h>
	int main(){
		int n = 0x11223344;
		char* pc = (char*) &n;
		int* pi = &n;
		*pc = 0x55;
		*pi = 0;
		printf("%x\n",n);
		system("pause");
		return 0;
	}

最后结果就变为0了;

猜你喜欢

转载自blog.csdn.net/weixin_44781107/article/details/89405934