c语言指针一点都不难

C语言指针难吗???我用全网最全的指针知识告诉你。它不难!!! 全网最全的C语言指针知识,零基础可学。快点进来看吧。 阅读详情

目录

指针

指针数组与数组指针

指针数组

数组指针


指针

如果说结构体是C语言的肚子可以用来存放东西,那么指针就是C语言的神经纤维用来指向。

char *p;  定义了一个指向char类型变量的指针p,但是没有让它指向任何地址,可以称之为野指针。

 char *p=&a;   让p指向变量a的地址,&表示取地址的意思,&a即取a的地址。当指针p指向变量a的地址,我们就可以通过对指针p的操作,来实现对变量a的操作。

*p的*表示解引用,即取出变量p中的地址表示的值。需要注意的是:char *p中的char是规定指针p指向的类型。如果是int *p,那么指向的是int类型的指针,才能打印我们希望的值。

 

指针数组与数组指针

初学C语言的时候,对指针数组是很陌生的,当时我学的时候就是数组勉强理解,到指针就已经晕了。经过不断的接触,慢慢的发现其实它们并不神秘,只要我们了解了它们的构造和概念,就可以在随后的编程中,逐步掌握了,现在,我们先来剖析一下二者。

char (*p)[2]和char *p[2]    这两个哪个是指针数组?    可以通过一个方法来区别,即表达式有没有括号()。

char *p[2]是没有括号的,所以我们就可以直接判断,它是一个指针数组。指针数组强调的是数组,所以不会对*p加上括号。

char (*p)[2] 是数组指针,*p是用括号括起来的,所以数组指针强调的是指针。

好了,现在我们就可以很快的区别谁是数组指针,谁是指针数组了。

 

指针数组

类型 *变量名[数组长度];

顾名思义,指针数组,即存放指针的数组,数组的成员是指针 ,因为如果我们需要使用到多个指针,每次都定义一个新的指针,将会比较繁琐,所以指针数组,孕育而生。其实说白了,指针数组就是数组中存放了几个地址连续的指针。

比如,int *p[2];    我们定义了一个指向int类型的指针数组,再定义int a=100;    int b=200;  

然后将a和b的地址分别存放在变量p[0]和p[1]中,p[0]=&a;    p[1]=&b;    

打印一下,printf("p[0]=%d,p[1]=%d\n",*p[0],*p[1]);    输出p[0]=100,p[1]=200;    

这个简单的例子说明了指针数组的确是存放指针的数组。

char *pa;
int *pb;
printf("sizeof pa is =%d\n",sizeof(pa));    //打印4
printf("sizeof pb is =%d\n",sizeof(pb));    //打印4
printf("sizeof *pa is =%d\n",sizeof(*pa));    //打印1
printf("sizeof *pb is =%d\n",sizeof(*pb));    //打印4

记得我之前笔试的时候,经常会有上述 关于指针所占字节大小的填空题。

数组指针

类型(*变量名)[数组长度];

介绍了指针数组,现在我们来看看数组指针。数组指针,是指向数组的指针。比如char (*p)[5];    该指针p指向具有5个char类型成员的数组空间。

一般使用的指针,如char a[10]="hello";   char * p=a; 表示该指针指向数组a,其实是指向了数组首元素a[0]的地址。这就是区别所在。来看下面一段代码。

char msg[2][3]={1,2,3,4,5,6};
char buf[2][3];
memset(buf,0,sizeof(buf));

char (*Pc)[3]=buf; //数组指针
char (*Pd)[3]=msg; 
int i=0;
for(i;i<6;i++)
{
printf("msg is =%d,",*(*Pd+i));

}

printf("\n");                //换行
scanf("%s",*(Pc));     //输入
printf("buf is %s\n",*buf);

乍一看,是不是觉得有点凌乱,我们慢慢来剖析这段代码。首先我们定义了msg和buf两个二维数组,并且初始化msg。

然后定义了两个数组指针,Pc和Pd。先来看Pd,我们让Pd指向数组msg,然后就可以通过操作Pd来实现对数组msg的操作。

我们用一个for循环来打印出msg中所有的元素。重点是*(*Pd+i)  ,*p的意思是取出变量p中地址里的值,我们可以把*(*Pd+i)看成是*p,即*Pd+i=p,这就很好理解了。*Pd指向msg,所以*Pd存放的是msg[0][0]的地址,*Pd+1存放的是msg[0][1]的地址,依次类推,这就是为什么*Pd要加i。所以*(*Pd+i)   打印出了msg所有的元素。为了验证上述说法,我们来打印一下*Pd的地址。

printf("p of *Pd is=%p\n",*Pd);
printf("p of msg[0][0] is=%p\n",msg[0]);

printf("p of *Pd+1 is=%p\n",*Pd+1);

printf("p of msg[0]+1 is=%p\n",msg[0]+1);

编译发现,*pd和msg[0]的地址一样,*pd+1和msg[0]+1的地址也一样。

没错,*pd存放的是地址,它指向了msg的地址。

下一篇 C语言数组指针

c语言中关于数组与指针的一点心得 c语言中关于数组与指针的一点心得 相信大多人刚刚接触C语言的数组时,一定听过类似的话:数组名有时候可以看做指针,但有时候不能看做指针。也一定发现过数组名的地址与对数组名进行取地址运算之后得到的地址相等,相信大多数人也为此困惑,这篇文章就是面对初学者,希望可以解除你们困惑。 数组名什么情况不可以看做指针 (1)数组是sizeof运算符的操作数。 (2)数组是地址运算符&的操作数。 (3)当 阅读详情

相关推荐

C++ muduo网络库知识分享01 - Linux平台下muduo网络库源码编译安装

Muduo is a multithreaded C++ network library based on the reactor pattern. muduo库的介绍就是:一个基于reactor反应堆模型的多线程C++网络库。 muduo网络库是C++语言开发的一个非常优秀的网络库,作者陈硕,muduo网络库在多线程环境下性能非常高,该系列文章会分享一些muduo库源码的知识,包括它的线程池源码...

大秦坑王的专栏 3万+

C++指针基础问题

有一小段程序: #include int main() { using namespace std; double *pd = new double; *pd = 1000001.0; cout << "pd的地址=" << pd; cout << "&pd的地址=" << &pd; }

陈刚编程心得与知识集 421

2026年9月20日 2026年CSP-S初赛真题整理

这是本次考试最难的部分,涉及Gray Code(格雷码)+ 状态压缩 + 数学推导难点解决方案关键代码问题转化将得分差转化为m−2xim - 2x[i]m−2xi高效枚举Gray Code相邻状态O(1)转移奇偶判断利用奇偶性统一条件。

weixin_51184047的博客 622

C语言学习记录——사 初识C语言(4)

初识C语言(4)——指针和结构体

kongqizyd146的博客 501

advanced installer 打包Flutter的Windows程序安装包(基本打包、开机自启、定时自动检测升级、包含卸载程序)

advanced installer 打包Flutter的Windows程序安装包(基本打包、开机自启、定时自动检测升级、包含卸载程序)

qq_45634989的博客 2878

解析AI人工智能领域AI芯片的散热技术

当你用ChatGPT写代码、用AI生成高清图片时,背后的AI芯片可能正在“发高烧”——全球TOP500超算的平均功耗已突破10兆瓦,单颗GPU的峰值功耗超过700W(相当于3台家用空调同时运行)。本文将聚焦AI芯片的散热技术,覆盖从基础原理到前沿方案的全链条解析,帮助读者理解“散热为什么比算力更重要”。

AIGC应用创新大全的博客 934

【C语言】指针内容全篇

每个优秀的人都有一段沉默的时光,那段时光是付出了很多努力却得不到结果的日子,我们把它叫做扎根。

joy.728的博客 2374

C语言程序设计——单词的统计和替换

【任务描述】 对任意一篇英文文章,统计其中每个单词分别出现了多少次,并可替换指定的单词。⑶ 对单词进行替换时,允许用户选择全部替换或逐个替换。替换完成后,将文章保存到文件。⑴ 英文文章以文件形式输入。⑵ 统计的结果保存到文件。

m0_60738889的博客 810

C语言——指针

存储类型 数据类型(* 指针变量名)[列数];例如:p可以代替进行元素访问,但本质不同,p是指针变量,a是地址常量。把p进行运算的时候,例题中情况要3个单位3个单位进行运算。访问数组元素地址(a[i][j]的地址):*(p+i)+jp[i]+j访问数组元素值:(p+i)+j)*(p[i]+j)例如:用数组指针遍历二维数组。i < 2;} return 0;练习:有一个班,3个学生,各学4门课,计算总平均分以及输出第n个学生的成绩。

weixin_43624626的博客 1万+

KEPServerEX 6 之驱动协议(UDD)实战 HTTP协议对接OpenWeatherMap天气 API全流程指南

本文分享了基于 KEPServerEX 6 的通用设备驱动(UDD)对接OpenWeatherMap天气API的实战方案。该方案针对工业物联网场景进行了深度优化,具有动态城市切换、运行时热配置、老旧JS引擎兼容等核心特性。文章详细介绍了从环境准备、脚本部署到Tag配置的全流程,重点解析了Legacy JS语法适配、Float类型安全处理等关键实现细节,并提供了完整的避坑指南和故障排查方法。该方案经过生产环境验证,可稳定实现气象数据采集与动态切换功能,适用于SCADA/MES系统集成场景。

-雲飛兄-博客 712

隧道裂缝检测【C++PCL】

我们团队注重每一个细节,确保代码的可读性、可维护性和可扩展性达到最高标准。我们严格遵循行业最佳实践,采用模块化和面向对象的设计原则,使得我们的代码结构清晰且易于理解。我们的点云服务更是引以为傲。我们的技术团队拥有深厚的专业知识和丰富的经验,能够提供高度准确和高效的点云处理服务。无论是点云的获取、存储还是分析,我们都能够满足客户的需求,并提供出色的解决方案。我们的技术实力也是无与伦比的,拥有广泛的技术背景和深入的专业知识。

weixin_45196569的博客 848

c语言—指针详解

文章目录一、指针是什么二、指针和指针变量1.左值与右值2.两者的区别1.指针2.指针变量3.如何使用三、指针和指针类型 一、指针是什么 指针,是C语言中的一个重要概念及其特点,也是掌握C语言比较困难的部分。指针也就是内存地址,指针变量是用来存放内存地址的变量,不同类型的指针变量所占用的存储单元长度是相同的,而存放数据的变量因数据的类型不同,所占用的存储空间长度也不同。有了指针以后,不仅可以对数据本身,也可以对存储数据的变量地址进行操作。 指针就是地址,地址就是指针。 使用指针的目的是提高使用效率 二、指

Welcome to my blog. 2万+

RT-DETR 跨模态检测改进:融合红外数据提升 R50 夜间检测效果

本文提出跨模态自适应融合RT-DETR(CMF-RTDETR-R50),通过双分支骨干网络、可变形模态对齐和门控注意力融合三大模块,将红外数据融入RT-DETR-R50检测器,显著提升夜间目标检测性能。该方法在夜间场景下mAP@0.5提升11.7%,小目标检测AP_S提升15.3%,同时保持实时性(38 FPS)。关键技术包括:1)独立提取可见光与红外特征;2)可变形卷积解决模态对齐问题;3)动态门控机制自适应融合双模态特征。该方案适用于安防监控、自动驾驶等夜间检测场景,为跨模态实时检测提供实用解决方案。

走向CTO的路上... 1446

【c语言从入门到精通】c语言原来一点都不难!初阶指针知识点限时大放送(上)

指针作为c语言学习过程中必不可少的一个重要部分,对我们后期数据结构等学习具有重要意义。很多初学者面对指针复杂琐碎的知识点不知从何下手,我将会分为初阶和进阶两个部分将指针的知识点进行梳理,本篇为指针初阶的知识点讲解,保证大家看完之后会对指针会拥有更系统和深刻的认识,接下来的博客中也会提供指针与数组相关的一些经典笔试题解析,帮助大家巩固指针知识,保证大家时间从入门到精通!!!下面,请大家坐稳扶好,正文开始啦~~1.指针是什么?在写c语言程序时,无论是创建变量,还是数组等,都要在内存中开辟空间。而。

2301_78320637的博客 240

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

指针c语言有什么作用,c语言中指针有什么用?

一、什么是指针C语言里,变量存放在内存中,而内存其实就是一组有序字节组成的数组,每个字节有唯一的内存地址。CPU 通过内存寻址对存储在内存中的某个指定数据对象的地址进行定位。这里,数据对象是指存储在内存中的一个指定数据类型的数值或字符串,它们都有一个自己的地址,而指针便是保存这个地址的变量。也就是说:指针是一种保存变量地址的变量。前面已经提到内存其实就是一组有序字节组成的数组,数组中,每个字节大大...

weixin_42515781的博客 9107

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

c语言指针详解

指针是C语言中广泛使用的一种数据类型。 运用指针编程是C语言最主要的风格之一。利用指针变量可以表示各种数据结构; 能很方便地使用数组和字符串; 并能象汇编语言一样处理内存地址,从而编出精练而高效的程序。指针极大地丰富了C语言的功能。 学习指针是学习C语言中最重要的一环, 能否正确理解和使用指针是我们是否掌握C语言的一个标志。同时, 指针也是C语言中最为困难的一部分,在学习中除了要正确理解基本

中国IT精华录 19万+

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

C语言指针总结

指针,可谓是C语言学习过程中不可或缺的一部分,同时也是学习难度相对较高的一个部分,接下来就跟着小鸥来见识一下指针的奥妙吧!总的来说,指针涉及的知识点较多,虽然想要彻底弄明白实有一定难度,但只要坚持学习就总有一天能拿下这篇江山!本篇文章主要总结了指针的重要知识点,相信如果你对本篇提及的内容已经熟练掌握,那你在指针上的理解也已经不差了,还有一些细枝末节尚未提及,有兴趣的读者可以关注我接下来的文章内容,或者直接另寻高人指点,优快云高手云集,总有适合你的高人。

海盗猫鸥的博客 938

c 语言输出指针的值,C 语言指针

C 语言指针在本教程中,您将学习指针。什么是指针,如何使用它们以及在示例的帮助下使用它们时可能遇到的常见错误。指针是 C和C ++ 编程的强大功能。在学习指针之前,让我们学习一下C语言编程中的地址。C 语言地址如果程序中有变量var,则&var将在内存中提供其地址。使用scanf()函数时,我们已多次使用地址。scanf("%d",&var);在此,用户输入的值存储在var变量的地址中。...

weixin_39587113的博客 8020

C语言指针并不难

C语言的核心在于指针,这2个指针题目,如果你不用编译就能得出正确的答案,那你一定是C的高手,不择不扣的高手—指针并不难!    第一题:求p[-1]、p[-5]的值(此题重点在于负号,很简单,考察对指针了解的广度方面) #include int main(void) {        char* p = NULL;       char* tmp = "12345678";

良师,益友 3万+

C语言——指针一点通※

用简单的语言,描述指针的含义。本文包含指针的初阶高阶,包含指针变量的理解,野指针的理解,指针数组,数组指针,函数指针,函数指针数组。

qq_62270879的博客 768

C语言指针

在计算机内部存储器(简称内存)中,每一个字节单元,都有一个编号,称为地址。在这里,读者可以把计算机的内存看作是一条街道上的一排房屋,1个字节算一个房屋,每个房屋都可以容纳8比特数据,每个房屋都有一个门牌号用来标识自身的位置。这个门牌号就相当于内存的编号,就是地址。简单地说,内存单元的地址称为指针。专门用来存放地址的变量,称为指针变量(pointer variable)。在不影响理解的情况下,有时对地址、指针和指针变量不区分,通称指针。

AD7E280B00C0的博客 1207

C语言中关于指针的一点点理解

去年创业开始就没有深度的去思考问题了,所以编程这个爱好,也就一直放下了。最近因为疫情在家闲的无聊,脑子里都是一些乱七八糟的事情,白天在教孩子认钟表时间的时候忽然想到了之前学习C语言时指针那里特别懵,有点云里雾里。今晚闲着没事儿把心里的疑问仔细的琢磨了一下, 略有感悟,随笔记下。 1、指针是指针,指针变量是指针变量。指针我们可以说是一段代码,他代表一个唯一的内存地址。这有点像函数,每一个指针都有且...

zzwlyj的博客 437

c程序语言难么,c语言难不难

计算机二级考试听说不是很难,但是计算机二级考试c语言难不难大部分同学就不太清楚了。下面是由出国留学网小编为大家整理的“计算机二级考试c语言难不难”,仅供参考,欢迎大家阅读。计算机二级考试c语言难不难二级C难度不大,相比来说来说容易的。因为C语言是最基础的计算机语言,VB、C++ 基本是C语言的延伸如果有C语言基础,学其他语言就不会很吃力,而且二级C语言考试难点在于数组,指针,函数这三大部分起码占4...

weixin_31159439的博客 2742

c语言指针的一点测试

1.测试代码 #include <stdio.h> void test(void) { int a[][2] = { {0,2}, {3}, {9} }; printf("%d,%d,%d,%d,%d,%d\n", a[0][0], a[0][1], a[1][0], a[1][1], a[2][0], a[2][1]); //多级指针(与数组无关) int* q = &a[1][0]; int** q2 = &q; int*** q3 = &.

WLB 的博客 289
上一篇: c语言数组
下一篇: linux下内核链表实现学生信息管理系统
Qt上位机开发
Qt上位机开发 领域专家: C/C++技术领域 领域专家: C/C++技术领域
博客等级 码龄9年 9664粉丝 178原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值