前言:穿越迷雾,探索C语言指针的奇幻之旅

各位少年,大家好,我是博主那一脸阳光,今天给大家分享指针,内存和地址的使用,以及使用。
前言:
在编程的世界中,若论灵活多变、深邃神秘的角色,非“指针”莫属。如同哈利波特手中的魔杖,它赋予了C语言强大的魔法力量,能够直接操控内存空间,实现数据与功能的高效交互。对于许多初识C语言的开发者来说,指针可能像是一扇半掩的门,背后隐藏着令人既好奇又畏惧的秘密花园。

然而,只有深入理解并熟练掌握指针这一核心概念,才能真正领略到C语言的魅力所在——从底层内存管理到高级数据结构构建,从函数调用机制到复杂系统设计,指针无处不在,发挥着举足轻重的作用。这段奇妙的旅程将带你拨开指针表面的层层迷雾,揭示其背后的运行机制与应用技巧,助你在编程领域修炼出更为深厚扎实的内功,为驾驭C语言这艘巨轮驶向技术海洋的更深处奠定坚实基础。

指针变量的意义

指针变量的⼤⼩和类型⽆关,只要是指针变量,在同⼀个平台下,⼤⼩都是⼀样的,为什么还要有各
种各样的指针类型呢?
其实指针类型是有特殊意义的,我们接下来通过指针的解引用来探讨。

int main()
{
   
int a=100;
int*pa=&a;
double p=3.14;
return 0;
}

指针的解引用

对比,下面2段代码,主要在调试时观察内存的变化

//代码1
#include <stdio.h>
int main()
{
   
 int n = 0x11223344;
 int *pi = &n; 
 *pi = 0; 
 return 0;
}
//代码2
#include <stdio.h>
int main()
{
   
 int n = 0x11223344;
 char *pc = (char *)&n;
 *pc = 0;
 return 0;
}

上两段C语言代码中有什么其意呢?
调试我们可以看到,代码1会将n的4个字节全部改为0,但是代码2只是将n的第⼀个字节改为0。
结论:指针的类型决定了,对指针解引⽤的时候有多⼤的权限(⼀次能操作⼏个字节)。
⽐如: char* 的指针解引⽤就只能访问⼀个字节,⽽ int* 的指针的解引⽤就能访问四个字节。

指针±整数

先看⼀段代码,调试观察地址的变化。

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

在这里插入图片描述
我们可以看出, char* 类型的指针变量+1跳过1个字节, int* 类型的指针变量+1跳过了4个字节。
这就是指针变量的类型差异带来的变化。
结论:指针的类型决定了指针向前或者向后⾛⼀步有多⼤(距离)。

#include<stdio.h>
int main()
{
   
int arr[10] = {
    0 };
int i = 0;
int* p = &arr[0];
for (i = 0; i < 10; i++)
{
   
*p = 1;
p =p+1;
}
for (i = 0; i < 10; i++)
{
   
printf("%d ", arr[i]);
}
return 0;
}

这段C语言代码主要功能是初始化一个整型数组,并通过指针遍历并修改数组的元素值,最后输出整个数组的内容。下面是对代码逐行详细解析:

C
#include<stdio.h>
引入标准输入输出库(stdio.h),使得程序可以使用printf等输入输出函数。
C
int main()
{
   
定义主函数main(),它是程序执行的入口点。
C
    int arr[10] = {
    0 };
声明并初始化一个包含10个整数元素的数组arr,所有元素初始值均为0。
C
    int i = 0;
    int* p = &arr
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小敖探花

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值