指针VS指针变量


前言

宿舍楼
   假设你是你们学校派来监督宿舍楼建造的监工,今天你去宿舍楼看了一圈,走到楼下门口,红框中的工人发现你的钥匙掉那个宿舍了,喊你过去,但是新造的宿舍楼还没装修,也没有标宿舍号,怎么办呢?你只能从第一层的第一个房间开始一个个往上找,这样的查找效率特别低,如果有宿舍号的话,那么查找会快很多。

一、指针是什么?

   为了方便查找,我们给宿舍楼中的每间房标上了编号。同样为了方便查找,我们给内存中的每一个字节都带上了编号,用来提高查找效率,这里所谓的“编号“”,计算机中,我们称之为地址一般的地址,具有明显的指向性,我们一般把地址叫做指针

指针就是地址

二、指针和指针变量

1.指针

   要了解指针,首先我们要知道一个概念:内存。内存是电脑上特别重要的存储器,计算机中所有程序的运行都是在内存中进行的。所以为了有效的使用内存,就把内存划分成一个个小的内存单元,每个内存单元的大小是1个字节。
   为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该内存单元的地址,而地址形象化地称为指针

2.指针变量

   变量都有地址(可以用&来取得变量的地址),那地址如何存储,就需要定义一个指针变量。指针变量是一个专门存放另一个变量的地址(即指针)的变量指针变量的值是地址(即指针)

3.指针变量的大小

#include <stdio.h>
int main()
{
    
    
	printf("%d\n", sizeof(char*));
	printf("%d\n", sizeof(short*));
	printf("%d\n", sizeof(int*));
	printf("%d\n", sizeof(double*));
	system("pause");
	return 0;
}

32位:

32位中指针变量的大小
64位:64位中指针变量的大小 结论:指针变量的大小在32位平台是4个字节,64位平台是8个字节。

4.指针VS指针变量

#include<stdio.h>
int main()
{
    
    
	int a = 20, b = 10;     //定义整型变量a,b,并初始化
	int *p1, *p2;    //定义指向整型数据的指针变量p1,p2,‘*’表示指向
	p1 = &a;                //把变量a的地址赋给指针变量p1
	p2 = &b;                //把变量b的地址赋给指针变量p2
	printf("&a=%p &b=%p\n", &a, &b);//输出变量a,b的地址
	printf("p1=%p p2=%p\n", p1, p2);//输出指针变量p1,p2
	system("pause");
	return 0;
}

在这里插入图片描述
   通过这个例子可以让我们更好的理解指针变量,指针变量有变量名:p1,p2,有变量内容:&a,&b。

指针:是地址。
指针变量:要开辟空间,有变量名,有变量内容(指针变量中存放地址即指针)。

通常我们说的指针就是指针变量。

三、指针的使用

1.声明一个指针变量

代码如下:



int *p;        // 声明一个 int 类型的指针 p
char *p        // 声明一个 char 类型的指针 p
int *arr[10]   // 声明一个指针数组,该数组有10个元素,其中每个元素都是一个指向 int 类型对象的指针
int (*arr)[10] // 声明一个数组指针,该指针指向一个 int 类型的一维数组
int **p;       // 声明一个指针 p ,该指针指向一个 int 类型的指针


2.指针的解引用

对指针的解引用,代表指针指向的目标。

代码如下:

#include <stdio.h>
int main()
{
    
    
	int a = 20;
	printf("a=%d\n", a);
	printf("&a=%p\n", &a);
	int *p = &a;
	printf("p=%p\n", p);
	printf("*p=%d\n", *p);//解引用
	system("pause");
	return 0;
}


使用指针的解引用,给a赋值10。

#include<stdio.h>
int main()
{
    
    
	int a;
	int *p = &a;     //定义一个整型指针p,并且p指向了a的地址
	*p = 10;        //解引用,即给a赋值10;
	printf("a=%d\n", a);
	system("pause");
	return 0;
}

结果

猜你喜欢

转载自blog.csdn.net/qq_34270874/article/details/109181990
今日推荐