一、变量的本质
变量的本质是一段连续内存空间的别名,或者说变量是一段连续内存空间的门牌号,画个图:
不管是标准数据类型,还是指针(指针也是一种数据类型),都是一样的,都是内存空间的门牌号,千万不好把变量画到内存中去。
二、通过变量往内存中进行读写数据
三、修改内存的方法
1、直接
int a = 10;
a = 20;
2、间接
#include"stdio.h"
#include"stdlib.h"
#include"string.h"
typedef struct Teacher {
char name[128];
int age;
}Teacher;
int main() {
int a = 10;
printf("&a : %d\n", &a);
*((int*)1638148) = 20;
printf("a : %d\n", a);
system("pause");
return 0;
}
输出结果:
*((int*)1638148) = 20;
这里通过通过内存首地址地址把内存里的内容修改了,其实这里就相当于指针了:
#include"stdio.h"
#include"stdlib.h"
#include"string.h"
typedef struct Teacher {
char name[128];
int age;
}Teacher;
int main() {
int a = 10;
printf("&a : %d\n", &a);
int *p = 1638148;
*p = 20;
printf("a : %d\n", a);
system("pause");
return 0;
}
让指针p指向a的首地址,然后利用p修改值,输出结果同上。指针这种间接修改内存值的方式,编译器会把它转换成上面这种形式,也就是说编译器本身就是这么实现对内存的间接修改的。
*((int*)1638148) = 20;
四、是否可以对内存空间取别名
这在C++中就是使用引用做到这一点的
五、变量的三要素:名称,大小,作用域