C语言----指针

发布时间:2026/8/5 11:33:53
C语言----指针 指针的定义或初始化基类型 * 指针变量名;(1) (2) (3)示例int * p这里的基类型是指被指向的数据类型是什么类型在64位下指针类型所占据的空间都是八个字节一个字节八位二进制数这里的*是指定义了指针类型变量的提示符与之后*运算不同。int a 10;int *p a; //意识是p的值是a的地址int a 10;int *p;*p a; //这是不可行的*p是指p地址上的值pa //这是可行的p本身就是需要一个地址为值int *p //定义指针却不初始化指针值是随机的int *pNULL //0号地址利用指针可以验证电脑是大端还是小端模式int num 0x12345678;char* p (char*)num;printf(0x%02x\n, *(p i));得到结果【0x78】说明低位存在低位是小端模式指针类型允许的计算pN //注意: 运算结果还是指针 表示的含义 pN*sizeof(基类型) ---p指向了第N1个基类型p-N //与pN相同p //表示加了一个基类型的大小p--p-q //两个指针相减运算结果表示 两个地址间 差了几个基类型关系运算 ! //都是可以的指针——一维整型数组int a[10] {1,2,3,4,5,6,7,8,9,10};int *p a[0];int *p a; //说 p指向了数组a这里a作为数组名退化为首元素地址也就是a[0]初始化完成后对p也就是地址做*运算可以得到a[0]的值p本身存储的是地址。拓展开来有下式*(pi) a[i]constconst基本用法const int a 10; //限定a为只读 ---空间还是栈上但是只能读不能改const----指针const char *s //这个限定仅仅是限定了s地址所指向的值不能通过 *s的方式进行修改也可以直接修改s地址就是不能通过*s修改s所指的值char const *s //与上式等价char *const s //const 离s近就是用来限定的s的表示s在定义后就不能再指向别的地址了const char * const s; //s不能修改 *s也不能修改能在形参写作const char *s的直接写可以在编译阶段就帮助我们发现错误修改了不能修改的值二级指针二级指针也就是指针的指针在二维数组有用到。一个易错点C 语言是值传递形参是实参的副本。如果直接把指针传进去函数内修改的是副本外部的指针不会变。所以想要在函数内让指针置空需要二级指针。在数据结构中想要用函数删掉整个链式结构时可以用一般情况下只需要在指针同域令其直接置空即可void set_null_good(int **p) { *p NULL; // 对二级指针解引用修改外部指针变量的值 } int *ptr malloc(4); free(ptr); set_null_good(ptr); // 传入指针的地址 if (ptr NULL) { printf(已成功置空\n); }