java 内存指针_C指针和内存

我正在学习C,现在我撞墙了 . 我很难理解指针 .

想象一下,我有这个代码:

#include

#include

#include

#define DELTA 33

int calls, seed=356;

int sum_ds(int a){

int d=DELTA;

calls++;

return a+d+seed;

}

int main() {

int num;

int *ptr;

int **handle;

num = 14;

ptr = (int *)malloc(2 * sizeof(int));

handle = &ptr;

*(*handle+0) = num;

*(*handle+1) = num+1;

*ptr = num-2;

ptr = #

*ptr = sum_ds(num-2);

}

让我们逐步了解我的理解 .

1 - int调用创建一个名为calls的变量,并不初始化它,因此它包含垃圾 . 它存储在DATA上,假设存储器地址为0xFFAA .

2 - int种子创建一个名为种子的变量,用整数356初始化 . 它存储在DATA上,让我们说内存地址为0xFFAB .

3 - int num创建一个名为num的变量,并且不对其进行初始化,因此它包含垃圾 . 它存储在STACK上,假设存储器地址为0xFFAC .

4 - int * ptr创建一个指向int的指针,并且不为其分配任何地址 . 它存储在STACK上,假设存储器地址为0xFFAD .

5 - int ** handle创建一个指向int指针的指针,并且不为它指定任何地址 . 它存储在STACK上,假设存储器地址为0xFFAE . (很多人在这里烦恼)

6 - num = 14进入地址0xFFAC并在其上存储数字14 . 它是在STACK中完成的 .

7 - ptr =(int )malloc(2 * sizeof(int))在HEAP上,它为2个整数分配了内存大小,第一个内存字节的地址(比如说0xFFZZ)存储在ptr上(在STACK上),所以现在 ptr指向该内存地址 .

8 - handle =&ptr handle现在指向ptr . 我相信它现在指向0xFFZZ上的任何东西(很多人在这里)

9 - ( handle 0)= num指向int指针的指针,现在指定的值为num(14)(很多很多人在这里玩的很多)

10 - ( handle 1)= num 1指针的指针加上一个int,现在它的值被赋值为num 1(15)(很多很多人在这里玩了很多)

11 - * ptr = num-2值ptr指定值为num - 2(12) . 我相信它会进入内存地址0xFFZZ并存储数字12 .

12 - ptr =&num ptr现在指向num,我相信它现在指向0xFFAC .

13 - * ptr = sum_ds(num-2)ptr指向的值是sum_ds的返回值 . 我相信0xFFAC它被分配了401(12 33 356)

这是正确的吗?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值