C语言:指针

前言:相信大家都有被指针的大名吓到过,但是不用怕。今天我来带大家了解一下基础的指针。


一.指针变量是什么

1.什么是指针?

总的来说:编号=地址=指针

指针变量是用来存放地址的

2.内存

我们谈到指针不得不提到内存

在计算机中,所有的数据都是存放在存储器中的。计算机中程序的运行都是在内存中进行的 。所以为了有效的使用内存,一般把存储器中的一个字节称为一个内存单元,不同的数据类型所占用的内存单元数不等,如整型量占2个单元,字符量占1个单元等。为了正确地访问这些内存单元,必须为每个内存单元编上号。根据一个内存单元的编号即可准确地找到该内存单元。内存单元的编号也叫做地址。打一个比方这里的地址与我们生活中的地址十分相识也就是我们的门牌号 ,这样方便我们找到数据存放在哪里。综上所述:为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该内存单元的地 址。

如下图内存被划分成一个个的储存空间,每一储存空间就是一个内存单元,每一个内存单元都有一个编号,每个编号就是一个地址
C语言:指针_第1张图片

3.指针变量的使用例子

#include
int main()
{
	int num = 0;
	int* pa=#//取出num的地址
	//取出num的地址并放入指针变量pa中
	//num占4个字节,每个字节都有地址,这是取第一个地址
	//内存单元是连续的,知道第一个便可以找出全部数据

	printf("%p\n", pa);
	//%p是打印地址的
	return 0;
}

这样便取出num的第一个地址了,并且打印出来了

C语言:指针_第2张图片

大概过程便是,当我们定义了一个整型变量num后,内存便为我们定义的整型变量num分配了4个内存单元用于存储整型变量num的数据。而后我们再使用取地址操作符&获取到了整形变量num在内存中的存储空间的地址,要注意的是在这里使用取地址操作符&取出的是整型变量num的存储空间中第一个字节的地址。接着我们定义了一个指针变量pa接收并存储了我们获取到的地址,最后我们用%p打印出来。

C语言:指针_第3张图片

 二.如何理解指针变量的用法

#include
int main()
{
	int num = 0;
	int* pa=#
	printf("%p\n", pa);
	return 0;
}

依然是上面的这个例子,相信大家在上面有许许多多的疑问,*是什么,为什么是int*。

首先,pa是一个存放地址(指针)的变量,所以把pa叫做指针变量。

int*是什么呢?

int是在说明pa指向的对象是int,*是在说明pa是指针变量

举例来说

char ch = 'w';
	char* pc = &ch;
//char是说明pc指向的对象是char
//*是说明pc是指针变量
	float a = 10.0f;
	float* b = &a;
//float是说明b指向的对象是float
//*是说明b是指针变量

三.指针变量的大小

指针变量的大小取决于地址的大小
32位平台下地址是32个bit位(即4个字节)
64位平台下地址是64个bit位(即8个字节)
与int、double、float等等无关
什么是平台下地址呢?
C语言:指针_第4张图片

图中圈中的地方, 这便是平台,大家可以试一试下面代码并且更改平台

#include 

int main()
{
    printf("%d\n", sizeof(char *));
    printf("%d\n", sizeof(short *));
    printf("%d\n", sizeof(int *));
    printf("%d\n", sizeof(double *));
    return 0;
}

这是32比特位地址下,打印出的大小

14a68246f899440780ed78324e47470a.png

 C语言:指针_第5张图片

 这是64比特位地址下,打印出的大小

474de8596fc04bfba87826a0ab14154b.png

 C语言:指针_第6张图片

所以指针变量的大小取决于地址的大小 


四.总结

在这 关于基础指针就讲完了,希望我的讲解能为大家带来一丝丝的帮助。当然这只是指针的基础,希望大家可多多练习,可以应用于自己的代码中去。大家都能成为大。

加油加油!!!

本文有不足之处,希望各位兄弟们能给出宝贵的意见。谢谢大家!!!

新人,希望个位兄弟们能动动小手,三连走一走!!!支持一下

你可能感兴趣的:(#C语言,c语言,开发语言)