9.3.1指向char和int的指针_实例0

视频教程👇
实例0
步骤一

编译:
gcc -m32 -o pointer_test pointer_test.c
运行:
./pointer_test
结果:

从运行的结果我们可知,变量c的地址编号(即地址)是0xffaaa2b7,指针变量pc的地址编号是0xffaaa2b8,如下图所示,编译成32位的机器码,字符类型占用一个字节,指针类型就是用4个字节来存储的。

步骤二
我们把test0()函数里面的变量保存(赋予)一些值,假如这些变量不保存数据的话,那么存储该变量的地址空间就会白白浪费,就相当于买个房子不住,就会白白浪费掉。
我们把上面程序中的test0()函数里面的字符变量c,指针变量pc进行赋值。
c = ‘A’; //把字符‘A’赋值给字符变量c
pc = &c; //把字符变量c的地址赋值给指针变量pc
然后把赋值后变量的值打印出来
printf("c =%c\n",c);
printf("pc =%p\n",pc)
编译:
gcc -m32 -o pointer_test pointer_test.c
运行:
./pointer_test
结果:

从运行的结构来看字符变量和指针变量的地址编号发成了变化,所以在程序重新运行时,变量的地址,具有不确定性,字符变量c存储的内容是字符‘A’,指针变量pc存储的内容是0xffb009b7(用四个字节来存储)。
由于内存的存储方式是,小端模式:低字节的数据放在低地址,高字节的数据放在高地址。在内存中的存储格式如下图所示。

步骤三
我们辛辛苦苦定义的指针类型变量,我们要把他用起来了,下面我们来分析一下,用指针来取值,‘*’:表示取指针变量存储地址的数据。
我们在test0()函数里面添加如下代码:
printf("*pc =%c\n",*pc);
printf("//=================\n");
编译:
gcc -m32 -o pointer_test pointer_test.c
运行:
./pointer_test
结果:

指针变量pc存储的内容是是字符变量c的地址,所以*pc就想相当于取字符变量c的内容。如图

视频教程👇
