///01.地址.c
#include
#include
int get()
{
return 10;
}
//01.严格进行变量区分:
// 1.普通变量和指针变量
// 2.严格的变量类型:
// 常规类型+特殊类型
//02.对变量取地址的操作发起于寄存器当中
// 因此地址也生成于寄存器变量当中,C语言无法直接访问
//03.关于取地址符不能操作的两种情况:
// &&intNum;-->C语言无法直接操作寄存器变量
// &get();-->返回值存储与寄存器的(cache)区,或者程序的(备份内存),这两块儿内存都不可直接访问
int main01(void)
{
int intNum;
&intNum;//这里获取一个声明但没有初始化的普通变量的所属地址可以,但是如果是指针类型的变量就不行了
//&&intNum;//&intNum这个表达式所代表操作执行于寄存器当中,在寄存器当中使用寄存器变量进行存储,因此C语言无法进行寄存器变量的操作
// 而且&intNum所获得的数据来自于CPU-->寄存器-->代码区-->符号表中,因此不能通过取地址运算符进行操作(C语言相对于汇编语言的缺点)
//&get();//get();的返回值,也就是函数的返回值可能存储于两个常见位置:寄存器的缓冲区(cache),应用程序的备份内存,因此返回值不可取地址
system("pause");
}
///02.内容.c
#include
#include
//01.取值运算符("*")与取地址运算符("&"):
// 1.星号("*")表示取值运算符,也就是根据指针访问内存块儿
// 2.与号("&")表示取地址运算符,也就是根据变量的内存实体获取变量的地址
//02.对指针变量使用取值运算符(星号:"*")的使用规律:
// 用原始指针类型的指针级别减去取地址运算符的个数;
// 就是当前所访问的具体变量(普通变量和指针变量)
// 结果为0-->普通变量
// 结果为1-->一级指针变量
// 结果为2-->二级指针变量
// 结果为n-->N级指针变量
int main02(void)
{
//*(001) = 1;//由于常量读取于代码区符号表,产生于CPU寄存器,因此C语言不能够直接进行访问
int intVar = 10;
*(&intVar) = 3;//星号(*)表示取值运算符,也就是根据指针访问内存区块儿
printf("%d \n", intVar);
system("pause");
}
//03.取值运算符(星号:"*")的操作对象实质必须是指针