数组与指针不能混用的情况

扫描二维码

获取更多精彩

嵌入式杂牌军

                                                     

                                                  编辑|追梦星空

                                            公众号|嵌入式杂牌军

✎ 编 者 悟 语

    

      正当性的出发点应该是少目的性、不带偏见、以尊重为前提的多方考虑。

文 章 导 读

    C中的数组有能混用的情况,有不能混用的情况,今天就带小伙伴们探究一下!

    阅读过程中有什么问题可以后台交流哈,

1 关于指针与数组能不能混用的说明


    1)这种情况不能混用

    C语言中不管是变量还是函数,定义只能出现一次,声明可以进行多次。

    就是因为声明可以进行多次,所以不同的声明就引发了一些问题。

    ① 数组定义不能等同于指针的外部声明。

int array[];

    

    你知道下面两种声明的区别吗?

 

extern int *array;
extern int array[];

    它们的区别:

 

    第一条语句声明的array是个int型的指针,它的大小是一个int型的大小。

 

    第二条语句声明的array是个int型数组,长度尚未确定(不完整的类型),其存储在别处定义。

 

    ② 变量名相同,类型不同。

extern float array[];// 与上面定义的int array[]类型不匹配直接编译不过

    2)这种情况下可以混用

    作为函数参数的数组名等同与指针,即下面三种形式是可以混用的。

func(int *var)
func(int var[])
func(int var[128])

2 实例代码


    下面就一个C文件定义,另一C文件声明的几种情况进行一下实例代码的探究。

    1)指针与数值没有混用的情况

    

    说在代码注释中了,

/* file2.h */#include <stdio.h>
#include <stdlib.h>int array[];                    // 声明一下file2.c中对应的数组/* file2.c */#include <stdio.h>
#include <stdlib.h>
#include "file2.h"              // 在对应的头文件进行声明 int array[128] = {1,2,3,4,5};   // 在此处定义数组/* file1.c */#include <stdio.h>
#include <stdlib.h>
#include "file2.h"   extern int array[];             // 此种声明是能与int array[]对应上的 int main(int argc, char *argv[]) 
{printf("\n%d\n",array[1]);// 可以得到数据2return 0;
}

    运行结果:

    2)定义数组,声明指针

    直接编译不过。


/* file2.h */
#include <stdio.h>
#include <stdlib.h>int array[];                     // 声明一下file2.c中对应的数组int array[128]/* file2.c */#include <stdio.h>
#include <stdlib.h>
#include "file2.h"              // 在对应的头文件进行声明 int array[128] = {1,2,3,4,5};   // 在此处定义数组/* file1.c */#include <stdio.h>
#include <stdlib.h>
#include "file2.h"   extern *array;                  // 此种声明是与int array[]对应不上的,编译直接报错int main(int argc, char *argv[]) 
{printf("%d",array[1]);   return 0;
}

    编译结果:

    3)声明时指针不匹配

    直接编译不过。


/* file2.h */#include <stdio.h>
#include <stdlib.h>int array[];                    // 声明一下file2.c中对应的数组int array[128]/* file2.c */#include <stdio.h>
#include <stdlib.h>
#include "file2.h"              // 在对应的头文件进行声明 int array[128] = {1,2,3,4,5};   // 在此处定义数组/* file1.c */#include <stdio.h>
#include <stdlib.h>
#include "file2.h"   extern float array[];          // 此种声明float与int类型不对应,直接编译报错 int main(int argc, char *argv[]) 
{printf("%f",array[1]);return 0;
}

    运行结果:

    4)定义成指针以数组引用

    没有什么问题,可以正常使用。


/* file2.h */#include <stdio.h>
#include <stdlib.h>char *array;                    // 声明一下file2.c中对应的数组char *array/* file2.c */#include <stdio.h>
#include <stdlib.h>
#include "file2.h"              // 在对应的头文件进行声明 char *array = "abcdefg";        // 在此处定义数组/* file1.c */#include <stdio.h>
#include <stdlib.h>
#include "file2.h"   extern char *array;             // 此种声明是与char *array是一样的 int main(int argc, char *argv[]) 
{printf("\n%c\n",array[1]); // 指针以数组的方式使用 return 0;
}

    运行结果:

    今天就到这吧,希望对小伙伴有所帮助哈,喜欢的话欢迎转发、点赞、分享、在看、转载哈,

相关推荐

用宏封装结构体和函数入口,实现函数功能映射

编程意识——将字符串与功能宏进行绑定

编程意识——宏定义封装多个函数参数

利用结构数组和函数指针查找法调用函数


推荐阅读:

专辑|Linux文章汇总

专辑|程序人生

专辑|C语言

我的知识小密圈

关注公众号,后台回复「1024」获取学习资料网盘链接。

欢迎点赞,关注,转发,在看,您的每一次鼓励,我都将铭记于心~

嵌入式Linux

微信扫描二维码,关注我的公众号

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/465864.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[CTO札记]盛大游戏上市,是对《文化产业振兴规划》的响应

重要国策《文化产业振兴规划》于9月26日正式对外公布。巧合的是&#xff0c;就在前一天&#xff08;9月25日 &#xff09;&#xff0c;盛大游戏&#xff08;SDG&#xff09;成功在NASDAQ上市&#xff0c;并且创下了美股IPO规模之最&#xff08;10亿美元&#xff09;。1&#xf…

Linux内核入门之路 (非广告)

笔者从开始接触 Linux 内核应该有 4 ~ 5 年了&#xff0c;虽然不敢说非常了解 Linux 内核&#xff0c;但起码也有了点眉目。所以&#xff0c;本文主要想分享一下我的 Linux 内核入门之路&#xff0c;如果对大家有帮助的话&#xff0c;希望能够转发一下&#xff0c;帮助更多想学…

万能红外遥控开发

下班刚回到家&#xff0c;天气很热~空调遥控器呢&#xff1f;找不到&#xff01;躺平不想动~风扇遥控器呢&#xff1f;找不到&#xff01;想看电视&#xff0c;不想动~电视遥控器呢&#xff1f;找不到&#xff01;好不容易找到了&#xff0c;遥控器没电&#xff1f;崩溃&#x…

[Lydsy1805月赛] 对称数

挺不错的一道数据结构题QWQ。 一开始发现这个题如果不看数据范围的话&#xff0c;妥妥的树上莫队啊23333&#xff0c;然鹅10组数据是不可能让你舒舒服服的树上莫队卡过的23333 于是想了想&#xff0c;这个题的模型就是&#xff0c;把u到v链上的权值出现奇偶次的01串搞出来&…

linux下被遗忘的gpio_keys按键驱动

我们新项目硬件设计上使用gpio口做按键&#xff0c;所以我就需要搞定这个驱动&#xff0c;本来想自己写一个gpio口的按键驱动&#xff0c;然后看了下内核下面的代码&#xff0c;已经有现成的了。Linux内核下游很多很多的现成驱动&#xff0c;只要你想得到的&#xff0c;基本都是…

如何通过审计安全事件日志检测密码喷洒(Password Spraying)攻击

许多渗透测试人员和攻击者通常都会使用一种被称为“密码喷洒&#xff08;Password Spraying&#xff09;”的技术来进行测试和攻击。对密码进行喷洒式的攻击&#xff0c;这个叫法很形象&#xff0c;因为它属于自动化密码猜测的一种。这种针对所有用户的自动密码猜测通常是为了避…

单片机编程技巧—状态机编程

摘要&#xff1a;不知道大家有没有这样一种感觉&#xff0c;就是感觉自己玩单片机还可以&#xff0c;各个功能模块也都会驱动&#xff0c;但是如果让你完整的写一套代码&#xff0c;却无逻辑与框架可言&#xff0c;上来就是开始写&#xff01;东抄抄写抄抄。说明编程还处于比较…

啥叫旁路电容?啥叫去耦?可以不再争论了吗

1. 旁路和去耦先谈两个比较重要的概念&#xff1a;旁路电容(Bypass Capacitor)&#xff0c;去耦电容(Decoupling Capacitor)。只要是设计过硬件电路的同学肯定对这两个词不陌生&#xff0c;但真正理解这两个概念的可能并不多。我刚毕业时就问过我的师傅&#xff0c;为什么总是在…

H5活动产品设计指南基础版

本文来自 网易云社区 。 H5一般页面不会很多&#xff0c;看似简单&#xff0c;实际上会有很多细节需要注意&#xff0c;我自己在做过了几个H5之后&#xff0c;发现了一些常犯的问题&#xff0c;做了小结&#xff0c;希望给新开始做H5的产品相关的同学提供一些帮助。 首先说说一…

图解丨在嵌入式设备上实现HTTP服务器

您好呀&#xff0c;我是小二。本期为大家带来一个 WiFi 应用的实际场景&#xff0c;其实在之前「我对 WiFi 驱动移植过程&#xff0c;做了一次总结复盘」这篇文章中有简单提过&#xff0c;但由于内容较多&#xff0c;就单独摘出来了。来自读者的催更????????????&a…

maven详解之仓库

在Maven中&#xff0c;任何一个依赖、插件或者项目构建的输出&#xff0c;都可以称之为构件。 Maven在某个统一的位置存储所有项目的共享的构件&#xff0c;这个统一的位置&#xff0c;我们就称之为仓库。&#xff08;仓库就是存放依赖和插件的地方&#xff09; 任何的构件都有…

Linux内核代码,第一次看到这样使用的宏

晚上看内核代码&#xff0c;看到一个有意思的宏&#xff0c;我之前没有见到过&#xff0c;当然&#xff0c;肯定有人见到过&#xff0c;我写出来是给那些没有看到过的人看的。我说是深夜&#xff0c;那就肯定是深夜代码是从内核里面看到的我们正常使用宏是这样的C语言、嵌入式中…

flex柱状图和折线图的混合图使用

<?xml version"1.0"?> <mx:Application xmlns:mx"http://www.adobe.com/2006/mxml"> <mx:Script> <!--[CDATA[ import mx.collections.ArrayCollection; [Bindable] public var data1:ArrayCollectionnew ArrayCollection([{date:&…

给高通提个问题解决为啥那么久?

我第一次接触高通芯片是在中兴那&#xff0c;我们用的是一款很老的芯片&#xff0c;高通的文档非常多&#xff0c;资料非常丰富&#xff0c;如果有问题的话我一般都会从文档里面找答案。但是&#xff0c;但是&#xff0c;并不是所有的问题都是能自己搞定&#xff0c;比如遇到一…

新公司上班第一天

大家好&#xff0c;文章转自我的朋友helloworld&#xff0c;文中的我并不是我&#xff0c;感谢大家阅读&#xff0c;转载&#xff0c;在看。Hello 各位小伙伴&#xff0c;周一愉快~今天是我到新公司上班的第一天&#xff0c;入职新公司&#xff0c;就好像刚刚谈恋爱一样&#x…

[CTO札记]从Cloud Computing看战略决策:想做、能做与可做 -

1&#xff09;想做--未来方向很多人已经意识到&#xff0c;Cloud Computing未来将是基础设施&#xff0c;扮演水、电、气的角色。可以说&#xff0c;Cloud Computing是很多互联网、电信大公司想做的事。因为&#xff1a;》不仅重要&#xff08;大公司都不想自己的命运掌握在别人…

JAVA基础学习之路(三)类定义及构造方法

类的定义及使用 一&#xff0c;类的定义 class Book {//定义一个类int price;//定义一个属性int num;public static int getMonney(int price, int num) {//定义一个方法return price*num;} }public class test2 {public static void main(String args[]) {Book monney new B…

电子火折子的电路原理

d▲本文要分析的电路看古装剧时&#xff0c;不时可以看到这样的场景&#xff1a;有人从怀里掏出一个“火折子”&#xff0c;对着吹一吹就点着了火&#xff0c;觉得很神奇&#xff1a;更加神奇的是&#xff0c;有才的电子工程师们&#xff0c;重新发明了火折子&#xff0c;也就是…

如何快速构建嵌入式全栈知识体系?

嵌入式是一门交叉学科。一个嵌入式电子产品&#xff08;比如手机&#xff09;从底层到上层&#xff0c;一般会涉及半导体芯片、电子电路、计算机、操作系统、多媒体等不同专业领域的知识。很多从事嵌入式开发的朋友&#xff0c;通常来自不同的专业&#xff08;电子、电气、计算…

台湾高僧称游戏中杀人是罪业死后要下地狱

台湾著名高僧净空法师的一段谈因果报应的视频&#xff0c;近来被上传到网络上&#xff0c;引发网友特别是游戏玩家的极大反应。净空法师在这段视频中说&#xff0c;在电子游戏中杀人所造下 的罪业和杀真人是相同的&#xff0c;死后肯定会下阿鼻地狱&#xff0c;出来后也还要慢慢…