news 2026/4/16 8:06:11

c语言指针盲区速记

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
c语言指针盲区速记

1.int *p;中的*是类型修饰符 →p是指针变量

2.*p = 12;中的*是解引用运算符 → 向p指向的位置写值

3.int *p;*p = 12;不能这样做,指针(无论全局还是局部)必须初始化!!!

3.1 初始化解决方案1——指向已有的变量

int *p;

int x = 0; // 先有一个普通变量
p = &x; // p 指向 x
*p = 12; // 现在没问题,相当于 x = 12

3.2初始化解决方案2——动态分配内存

#include "stdlib.h"

int *p = malloc(sizeof(int)); // 在堆上分配一块 int 大小的内存,C 语言中不需要强制转换,C++要。
if (p != NULL) {
*p = 12; // 现在安全了
free(p); // 用完后释放
}

4.int sum(int *ar);与int sum(int ar[]);等价。因为数组名本身就是一个指针;

这里顺便记一下,数组正常情况下初始化是:

int arr1[5] ;

int arr2[] = {1, 2, 3, 4, 5};

int arr[5] = {1, 2, 3};

int arr[2][3];

int arr[2][3]={0};//或者直接赋值

但是数组作为形参时可以int sum(int ar[]);数组变量是特殊的指针;

数组变量是const的指针,所以不能被赋值。两数组之间赋值也不能直接

int arr[];

int arr1[];

arr[] = arr1[];

但是可以定义一个非const指针将数组名赋给它

int *p = arr[];

或者

int arr1[] = {1, 2, 3, 4, 5};
int arr[5]; // 必须先指定大小

//循环复制
for (int i = 0; i < 5; i++) {
arr[i] = arr1[i];
}

// memcpy函数
memcpy(arr, arr1, sizeof(arr1));

这里再引申两种指针:

const int *p;int * const p;

const int *p;/int const* p指向常量的指针(指针可变,指向的值不可变)const 在*左边,修饰int
int * const p;常量指针(指针本身不可变,指向的值可变)const 在*右边,修饰p

首先const int *p/int const* p,const 在*左边,修饰int,指针可变,指向的值不可变;

int x = 10, y = 20; const int *p = &x; // p 指向 x // *p = 30; // ❌ 错误:不能通过 p 修改指向的值 p = &y; // ✅ 正确:p 本身可以指向别处

然后int * const p,const 在*右边,修饰p,指针本身不可变,指向的值可变;

int x = 10, y = 20; int * const p = &x; // p 固定指向 x *p = 30; // ✅ 正确:可以通过 p 修改 x 的值 // p = &y; // ❌ 错误:p 本身不能改变指向

数组就是第二种了。

5.对指针加1是在地址上加,如char类型一字节就是加1,而int类型是4字节就是加4了。

6.指针相减的结果是两地址的差除以变量类型的字节。

7.*p++

int arr[] = {10, 20};
int *p = arr;
int x = *p++;

++运算优先级高于*,所以先算p++,p++把arr[0]备份,之后再后移p = arr[1],再解引用备份旧地址赋值给x。

8.void *p;通用指针,指向未知类型的指针。可以指向任何类型,不能直接解引用,不能做指针算术。


版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 8:03:21

Pixel Script Temple 计算机视觉入门:OpenCV基础操作代码自动生成

Pixel Script Temple 计算机视觉入门&#xff1a;OpenCV基础操作代码自动生成 1. 为什么需要代码自动生成工具 刚接触计算机视觉的朋友们可能都有这样的经历&#xff1a;想实现一个简单的图像处理功能&#xff0c;却要花大量时间查阅OpenCV文档&#xff0c;反复调试参数。Pix…

作者头像 李华
网站建设 2026/4/16 8:02:13

告别复杂配置!LumiPixel纯净人像创作站一键部署与使用指南

告别复杂配置&#xff01;LumiPixel纯净人像创作站一键部署与使用指南 1. 认识LumiPixel&#xff1a;纯净人像创作站 LumiPixel: Canvas Quest是一款专为艺术创作者设计的AI视觉创作平台。它将先进的Z-Image扩散模型与复古像素艺术美学完美结合&#xff0c;让AI艺术创作变得简…

作者头像 李华
网站建设 2026/4/16 8:01:13

Windows PDF处理终极指南:5分钟搞定Poppler预编译包完整教程

Windows PDF处理终极指南&#xff1a;5分钟搞定Poppler预编译包完整教程 【免费下载链接】poppler-windows Download Poppler binaries packaged for Windows with dependencies 项目地址: https://gitcode.com/gh_mirrors/po/poppler-windows 还在为Windows上的PDF处理…

作者头像 李华
网站建设 2026/4/16 7:59:11

【Agent-阿程】OpenClaw 版本更新v2026.4.14

【Agent-阿程】OpenClaw 版本更新v2026.4.14一、版本概览与发布说明1.1 版本核心信息1.2 升级价值速览二、核心安全加固&#xff08;重中之重&#xff09;2.1 网关工具安全策略收紧2.1.1 危险操作拦截机制2.1.2 附件路径安全增强2.2 事件与身份安全降级策略2.2.1 未信任事件权限…

作者头像 李华
网站建设 2026/4/16 7:59:11

Qwen3-TTS-Tokenizer-12Hz语音合成与Stable Diffusion联动:视听内容协同生成

Qwen3-TTS-Tokenizer-12Hz语音合成与Stable Diffusion联动&#xff1a;视听内容协同生成 1. 引言 想象一下这样的场景&#xff1a;你有一个绝妙的动漫角色创意&#xff0c;想要制作一个完整的短片&#xff0c;但传统流程需要找画师设计角色、请配音演员录制对白、找动画师制作…

作者头像 李华