C 语言之动态内存分配问题

本文深入解析C语言中动态内存分配后指针变量的地址变化,通过具体案例演示如何利用指针输入并倒序输出数组元素,揭示指针在C语言编程中的关键作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

前言:指针是 C 语言的灵魂,C 语言的精华在于有指针,指针的强大这里就不再强调了。本文主要简单分析动态分配内存后指针变量的地址变化。

 案例:要求我们输入 5 个数,然后再将这 5 个数倒序打印出来。

首先给出一段代码,便于我们分析:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int i;
    int * p = (int *)malloc(5 * sizeof(int));

    printf("请输入5个数:\n");
    for(i=0; i<5; ++i)
        scanf("%d", p++);

    for(i=5; i>0; --i)
        printf("%d ", *p--);  // 14行

    return 0;

}

分析:首先我们先动态分配 20 个字节的内存大小来保存我们存入的 5 个 int 类型的数据。指针变量 p 保存的是动态分配内存的第一个字节的地址,由于基类型是 int * ,所以能指向这个 20 个字节的内存。通过循环将输入的 5 个数保存到内存中。

这里主要分析指针 p 的地址变化。通过 Debug 调试。

0、动态分配内存后p的地址为如下:

1、进入循环体,输入第一个数时,p的地址为:

2、输入第二个数时,p 的地址为:


3、输入第三个数时,p 的地址为:

4、输入第四个数时,p 的地址为:

5、输入第五个数时,p 的地址为:

注意:当输完第五个值后,p的地址向后移动一位,此时 *p 的值为 0 ;

所以当我们倒序输出这 5 个值时,第 14 行要注意 *p-- 还是 *--p,前者是先输出 *p 的值然后再 --,后者是先 -- 再取值,这里必须是先向前移动一位然后再取值。

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值