二级指针的创建与使用
/* */
#include <stdio.h>
#include <stdlib.h>
void main( int argc , char **argv )
{
int *ip;
int **i;
int a; // 系统会自动分配一个地址空间给 int型变量a
// 要区分指针的地址和指针指向的地址
ip = &a;
*ip = 20;
// ip指针指向 "存放变量a的地址空间"
// ip本身也占用内存空间 -- 通过&ip可以知道ip指针的地址,该地址上存放的是 "变量a的地址"
printf("&a =%p\n\r",&a); // 打印出变量a的地址
printf("&ip =%p\n\r",&ip); // 打印出 ip指针的地址
printf("ip =%p\n\r",ip); // 打印出ip指针指向的地址, = &a
printf("*ip =%d\n\r",*ip); // 打印出 20
i = &ip; // i 指向的地址是 ip的地址
printf("i =%p\n\r",i); // 打印出来是 ip的地址, = &ip
printf("*i =%p\n\r",*i); // 打印出来是 ip指向的地址, = ip
printf("**i=%d\n\r",**i); // 注意是 %d; 打印出来是20, = *ip
printf("&i =%p\n\r",&i); // 这个是i的地址,该地址存放的值是 &ip
}
/*
注意:
int *ip;
ip = (int *)0x5600 0000 // 注意不能是(unsigned int *)也不能不加(int *);必须强制转换为和定义指针时一样的类型
*ip = 10;
// 如果以这种形式在ubuntu上运行,会报错,因为0x5600 0000 这个地址可能是不可访问的。
通过定义一个变量让系统自己分配一个地址,那个地址肯定是可以使用的。
*/