C语言指针学习1
做过硬件的人,学C语言指针,不难的,因为知道 内存地址总线的概念。
可以把内存想象成一栋楼,内存地址总线就是门牌号,房间里面装的变量的值。
以下代码以int型指针来学习,详细,啰嗦的解释了指针,
printf("---------this funciton show the point in C----------\n");
int *ip=NULL; //定义一个整数的指针
int ii = 1000; //定义一个整型变量
ip = ⅈ //把整型变量ii 的地址(即内存ram总线的地址)当做值,赋给指针变量ip.
//即 变量ip 存的值是:ii的ram地址
printf("siezof(int*)=%ld\n",sizeof(ip)); //结果=8 ,即 8byte=64位, 即当前系统的int* 是64位的。
printf("siezof(int)=%ld\n",sizeof(int*)); //结果=8 ,即 8byte=64位, 即当前系统的int* 是64位的。
printf("siezof(int)=%ld\n",sizeof(int)); //结果=4 ,即 4byte=32位, 即当前系统的int 是32位的。
//int 和 int* 都是 数据类型的一种,
//由上可以知道 int 类型的值大小是4byte(32位),可存-2,147,483,648 到 2,147,483,647
// int*类型的值大小是8byte(64位),可以存很大很大的数,比上面大。
printf("*ip====================================%d\n",*ip); //打印 int *ip 指向的整数值。
printf("ram addr of (int *)ip==================%p\n",&ip); //打印 变量ip的ram地址(ram总线地址)
printf("the value in up ram addr is a ram addr=%p\n",ip); //打印 变量ip的ram地址内存放的值,也可以说是变量ip的值。
printf("the value in up ram addr is a ram addr=%p\n",*(&ip));//打印 同上,另一种写法。
//由上面2行代码可以发现,字符'&' 是用来获取变量的地址(内存ram地址总线值)
// 字符'*',是按照ram地址总线值,来获取其里面存的值,就是变量的值。
printf("ram addr of int ii is ===============%p\n",&ii); //打印出 int 变量 ii 的 ram地址,即:总线地址。
printf("the value in up ram is a int value====%d\n",*(&ii)); //* 用来取出总线地址内的值=1000
printf("the value of int ii ==================%d\n",ii); //同上,打印变量ii的值。
//-----------------运行结果-----------------------------------
/*
---------this funciton show the point in C----------
siezof(int*)=8
siezof(int)=8
siezof(int)=4
*ip====================================1000
ram addr of (int *)ip==================0x7ffeec8a0ed0
the value in up ram addr is a ram addr=0x7ffeec8a0ecc
the value in up ram addr is a ram addr=0x7ffeec8a0ecc
ram addr of int ii is ===============0x7ffeec8a0ecc
the value in up ram is a int value====1000
the value of int ii ==================1000
从运行的结果可以看出来,内存地址值是6个字节的(如我这里的:0x7ffeec8a0ecc), 而int* 变量是 8个字节,所以可以存下。
*/