- 定义指向整型的指针变量并分配内存空间示例代码:
#include <stdio.h>
#include <stdlib.h>
int main() {
int *ptr;
ptr = (int *)malloc(sizeof(int));
if (ptr == NULL) {
printf("内存分配失败\n");
return 1;
}
*ptr = 10;
printf("指针指向的值: %d\n", *ptr);
free(ptr);
return 0;
}
- 内存分配过程:
- 首先定义了一个指针变量
ptr
,这个指针变量本身在栈上分配内存,其大小取决于系统的寻址能力。在32位系统下,指针变量通常占用4个字节;在64位系统下,指针变量通常占用8个字节。
- 然后使用
malloc
函数为 ptr
分配内存空间。malloc
函数从堆内存中分配一块指定大小(这里是 sizeof(int)
,通常在32位和64位系统下,int
类型一般占4个字节)的连续内存区域,并返回这块内存区域的起始地址,将其赋值给 ptr
。这样,ptr
就指向了堆上分配的这块内存空间。
- 指针变量本身占用内存大小:
- 在32位系统中,指针变量通常占用4个字节,因为32位系统的地址总线宽度为32位,即可以表示 $2^{32}$ 个不同的内存地址,所以需要4个字节(32位)来存储一个内存地址。
- 在64位系统中,指针变量通常占用8个字节,因为64位系统的地址总线宽度为64位,即可以表示 $2^{64}$ 个不同的内存地址,所以需要8个字节(64位)来存储一个内存地址。