指针即存储了目标数据对象的内存首地址和目标数据对象所占用的空间大小。
内存地址,像酒店的房间一样,每个房间都有一个房间号。
#include <stdio.h>
/*
时间:2022-04-16 19:04
作者:sgbl888
功能:初步学习指针(存储了另一个数据对象的内存首地址及所占用空间大小)
知识点:
1、&符号是取数据对象的内存首地址
2、*符号是对对应的数据对象内容取值或改值
3、%p是指针专用占位符(以十六进制输出)
4、32位系统指针占用4个字节,64位系统指针占用8个字节
5、不能把一个指针赋值给不同类型的指针,除非强制转换
*/
int main(){
int n = 123; //声明整型变量n
int* pn = &n; //声明int类型指针。也可写为 int*pn或int *pn。建议用int*这种方式比较直观
printf("n = %d\tn = %d\n", n, *pn); // *pn取指针对应的内容
printf("n的内存首地址为:%u\t或 %p\n", pn, pn);
char c1 = 8;
char* pc = &c1; //char*表示数据对象所占用空间大小,pc则存储了数据对象的内存首地址
printf("c1 = %d\tc1 = %d\n", c1, *pc);
printf("c1内存首地址为:%u\t或 %p\n", pc, pc);
//打印指针所占用的空间
printf("---------------\n");
printf("pointer pn use %zd Byte\n", sizeof pn);
printf("pointer pc use %zd Byte\n", sizeof pc);
printf("----------------\n");
//指针赋值、强制转换
//pn = pc; //把char*指针直接赋值给int*指针,错误提示:'int *' from incompatible pointer type 'char *'
*pn = 567;
printf("n = %d\n", n); //虽然没有对n进行赋值,但pn指向n。因此对pn赋值也修改了N的值。因为它们两个的内存地址相同
pc = (char*)pn; //强制转换
printf("pc = %p\n", pc);
printf("pc对应的内容:%d\n", *pc);
return 0;
}