c语言内存 指针问题

来源:百度知道 编辑:UC知道 时间:2024/06/27 10:01:57
我想知道,平时所说的c语言的内存分配,是在真实的物理内存上分配的吗

还有,譬如int a=5;int *p=&a;p++;
int譬如说占四个字节,那p++之后,p指向何处,第5个字节处?还是指向--
新手问题,可能不妥当

当你有疑问的时候,可以自己编程序去验证的,比如:
#include <stdio.h>

int main()
{
int a=5;int *p=&a;

printf("%p\n",p);//输出p的值,也就是a的地址
p++;
printf("%p\n",p);//输出p自加1后的值
return 0;
}

输出:
0012FF60
0012FF64

1. 事实上每个程序都有一个由操作系统分配的一个独立的内存空间,都是从0开始,最大4G,这样程序可以保持彼此独立。所以由这你应该明白,C语言中的内存分配只是应用程序自己的一个逻辑地址。当然物理内存与这里的内存是由操作系统进行映射的。

2. 如你所说,int 占4个字节,那么整型指针一次就移动4个字节。所以p++之后,p 指向的就是第5个字节处。而且它把第5~8个字节看成一个 int 。再一次指向,就是第9个字节处。

希望你能明白。

平时所说的c语言的内存分配,是在真实的物理内存上分配

譬如p=4,p++后,p=8

指针P是指向a的,a是int类型,那么当p++时,如果a是数组你自然就想到是a的下一个成员,那么当p++时在内存中仍然是向下推4个字节!

是在真实的物理内存上分配的,指向第五个字节的起始地址

int 占四个 那p++就是往后推4个字节啊