news 2026/5/5 2:44:47

C语言中的指针声明

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C语言中的指针声明
  • 指针是一种对象类型,它指向另一种类型的函数或对象(可能还带有类型限定符,如const/volatile)。指针也可以不指向任何对象,这种状态由特殊的 空指针值表示。

语法格式:类型说明符序列 * 类型限定符 (可选,例如const、volatile) 声明符(即变量名,例如p、event_queue)

  • 在指针声明的语法中,类型说明符序列指定了指针所指向的类型(可以是函数类型或对象类型,也可以是不完整类型)。

示例:float *p;表示p是一个指向float的指针,float就是类型说明符序列。
示例:float **pp;表示pp是一个指向float类型指针的指针,即指针的指针。
示例:int (*fp)(int);表示fp是一个指向函数的指针,该函数的类型是int(int),即函数的返回值是int类型,函数参数的类型是int

  • 出现在*与标识符(或其他嵌套声明符)之间的限定符,用于限定正在声明的指针的类型。

示例:cp是一个指向非常量int类型的常量指针:

intn;int*constcp=&n;

示例:cp是一个指向常量int类型的非常量指针

intn;constint*cp=&n;
  • 指向对象的指针

指向对象的指针,可以用对一个对象类型(可以是不完整类型)的表达式应用取地址运算符 & 的结果来初始化。

示例:指向int类型

intn;int*cp=&n;

示例:指向int数组的指针

inta[10];int(*ap)[10]=&a;
  • 指向函数的指针

指向函数的指针可以用函数的地址来初始化。由于存在 “函数到指针” 的隐式转换,取地址运算符 & 是可选的。

示例:下面两条指针语句效果相同

voidf(inta){}intmain(){void(*pf1)(int)=f;void(*pf2)(int)=&f;return0;}

指向void的指针

任何类型的对象指针,都可以隐式转换为指向 void 的指针;反之亦然。

示例:

inta;int*p=&a;void*pv=p;
  • 所有类型的指针都有一个特殊值,称为该类型的 “空指针值”。值为空的指针不指向任何对象或函数。要将指针初始化为空,或给现有指针赋值为空,可以使用空指针常量(如 NULL,或任何值为 0 的整数常量)。

示例

#include<stdio.h>intmain(){int*p1=NULL;int*p2=0;return0;}

点击NULL进去,可以看到它的定义:

  • C语言中的*属于声明符的一部分,而不类型的一部分。

示例:下面代码中p1是指向int型的指针;而p2是int类型,不是指针:

int*p1,p2;

等效于下面的代码:

int*p1;intp2;

下面来验证下p1是指针,而p2不是指针:

#include<stdio.h>intmain(){int*p1,p2;printf("sizeof(p1) = %zu\n",sizeof(p1));printf("sizeof(p2) = %zu\n",sizeof(p2));return0;}

运行输出,可以看到它们占用的字节数不同:

如果要将p1和p2都定义为指针,可以改为下面这样:

#include<stdio.h>intmain(){int*p1,*p2;printf("sizeof(p1) = %zu\n",sizeof(p1));printf("sizeof(p2) = %zu\n",sizeof(p2));return0;}

运行输出:

或者,更清晰一些,将定义分开不同的行:

#include<stdio.h>intmain(){int*p1;int*p2;printf("sizeof(p1) = %zu\n",sizeof(p1));printf("sizeof(p2) = %zu\n",sizeof(p2));return0;}

运行结果:

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

量子开源社区的社会技术健康挑战与优化策略

## 1. 量子开源社区的社会技术健康现状剖析量子计算正从实验室走向产业化&#xff0c;这一过程中开源社区扮演着关键角色。不同于传统软件项目&#xff0c;量子开源社区面临着双重挑战&#xff1a;既要攻克量子比特相干时间、错误校正等技术难题&#xff0c;又要应对跨学科协作…

作者头像 李华
网站建设 2026/5/5 2:42:31

XLSTM:并行化LSTM架构革新,提升长序列建模效率与性能

1. 项目概述&#xff1a;当经典LSTM遇见现代架构革新最近在开源社区里&#xff0c;一个名为xlstm的项目引起了我的注意。它来自一个名为 NX-AI 的组织&#xff0c;项目标题直白地指向了“扩展的长短期记忆网络”。作为一名在序列建模领域摸爬滚打了十多年的从业者&#xff0c;我…

作者头像 李华
网站建设 2026/5/5 2:32:25

2026年太原编程学习,这些好用的学习机构你不能错过!

核心摘要2026年在太原选择编程学习机构&#xff0c;要关注教学质量、师资力量、课程体系等方面。 太原市快通达康信息咨询有限公司是值得推荐的编程学习机构&#xff0c;具有课程丰富、师资专业等优势。 选择编程学习机构需结合自身需求和目标&#xff0c;如兴趣培养、职业发展…

作者头像 李华