小常识:
计算机中绝大部分数据都是放在内存中的,不同数据放在不同的内存区域:变量放在堆中,常量放在栈中
- 在内存中,数据以二进制的形式存在,以字节为单位进行数据的存取,每8个二进制组成一个字节。
- 内存中每个字节都有唯一的编号,按字节编号,从0开使依次递增,如下图冒号左边。
- 不同数据类型占据的字节数不同,如:int占4个字节,short占2个字节。
怎样得到变量的内存地址?
1. 直接寻址
内存的地址是一个无符号整数,一般用取地址运算符‘&’得到某变量的地址。
比如定义一个变量i,输出它的值和存取地址:
int main()
{
int i = 6;
printf("i = %d\n", i);
printf("i的地址为:%d\n", &i);
return 0;
}
2. 间接寻址
通过存放变量地址的其他变量访问该变量。可通过指针类型来实现该功能
2.1 指针变量
定义:具有指针类型的变量
变量的指针<==>变量的地址
2.2 指针变量的定义
int a = 8;
int *p;//定义了可以指向int型数据的指针变量。告诉编译器p是一个指针变量,占4个字节,需要用一个int类型的地址给它赋值。“*”表示间接寻址运算符,用来取地址单元p中的内容
p = &a;//初始化指针,给出指针p指向的地址
还可以写成
int* p = &a;