目录
前言
本篇将深入探讨C语言中至关重要的知识点——指针。鉴于指针内容的丰富性,我将其分为初阶和进阶两部分。初阶部分适合刚刚接触C语言的同学,许多人在学习指针时感到困惑,希望通过我的讲解,能让你们真正理解并掌握指针。现在,让我们立即开始这段指针之旅。
1. 什么是指针
在计算机科学中,指针(Pointer)是编程语言中的一个对象,它存储的是另一个变量的内存地址。通过这个地址,指针可以直接指向存储器中另一个地方的值。由于通过地址可以找到所需的变量单元,因此地址形象地被称为“指针”。换句话说,指针是通过它所存储的地址来找到对应的内存单元。
我们可以将指针类比为家的地址。如果想回家,就必须通过地址找到家的位置。指针就是存储地址的变量,通过指针可以访问对应的位置。
代码展示
#include <stdio.h>
int main()
{
int a = 10; // 在内存中开辟一块空间
int *p = &a; // 这里我们对变量a,取出它的地址,可以使用&操作符。
// 将a的地址存放在p变量中,p就是一个指针变量。
return 0;
}
总结:指针就是存储地址的变量。
2. 计算机如何编址
计算机如何为内存中的每个单元分配地址?一个单元的大小是多少?
经过仔细的计算和权衡,我们发现一个字节对应一个地址是最合适的。对于32位的机器,假设有32根地址线,每根地址线在寻址时产生一个电信号(正电/负电,即1或0),就会产生2的32次方个地址。
因此,在32位机器上,地址由32个比特位组成,用4个字节就能表示,所以一个指针占4个字节。对于64位机器,指针则占8个字节。
3. 指针类型
虽然指针的大小在32位机器上是4字节,在64位机器上是8字节,但指针并不是只有一种类型。为什么指针大小已经确定还要分整形指针、字符指针等数据类型呢?指针类型的意义又是什么呢?接下来我们用32位的机器来进行讲解。
指针类型的定义
int num = 10;
p = #
要将 &num
(num
的地址)保存到 p
中,我们知道 p
就是一个指针变量,那它的类型是怎样的呢?我们给指针变量相应的类型。
char *pc = NULL;
int *pi =