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

扫描二维码

获取更多精彩

嵌入式杂牌军

                                                     

                                                  编辑|追梦星空

                                            公众号|嵌入式杂牌军

✎ 编 者 悟 语

    

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

文 章 导 读

    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,一经查实,立即删除!

相关文章

解决/WEB-INF目录下的jsp页面引入webRoot下的Js、css和图片的问题

通常把jsp页面放在webRoot的/WEB-INF下可以防止访问者直接输入页面。 而webRoot的/WEB-INF下的页面是受保护的&#xff0c;用户无法通过形如http://localhost:8080/test/webRoot/WEB-INF/content/xx.jsp来访问&#xff0c;他们的访问都必须透过struts处理请求才能达到。 然而&a…

[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;帮助更多想学…

BZOJ3251: 树上三角形

BZOJ3251: 树上三角形 Description 给定一大小为n的有点权树&#xff0c;每次询问一对点(u,v)&#xff0c;问是否能在u到v的简单路径上取三个点权&#xff0c;以这三个权值为边长构成一个三角形。同时还支持单点修改。Input 第一行两个整数n、q表示树的点数和操作数第二行n个整…

CSS 背景透明

一、首先说下CSS实现背景全透明 全透明比较好实现。在要实现透明功能的id或Class里&#xff0c;输入 {background:transparent;}在IE、Firefox等浏览器下都有效果。二、再来说下CSS实现背景半透明 可以实现自定义的透明程度&#xff0c;代码如下&#xff1a; { filter:alpha(op…

万能红外遥控开发

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

每日一题(38)—— 一个32位的机器,该机器的指针是多少位?

一个32位的机器,该机器的指针是多少位&#xff1f; 指针是多少位只要看地址总线的位数就行了。80386以后的机子都是32的数据总线。所以指针的位数就是4个字节了。

简单的用户登录(一)

用来实现一个用户登录&#xff0c;这里要实现的是&#xff0c;输入用户名和密码&#xff0c;提交后&#xff0c;验证两者是否正确。 这里直接对表单提交的二者进行字符串判断&#xff0c;不涉及商业层活动。 实现项&#xff1a; 1 表单提交 2 获取表单提交值 3 客户端判断不为空…

[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;因为它属于自动化密码猜测的一种。这种针对所有用户的自动密码猜测通常是为了避…

每日一题(39)—— sizeof

以下代码中的两个sizeof用法有问题吗&#xff1f; void UpperCase(char str[]) {for(size_t i 0; i < sizeof(str)/sizeof(str[0]); i){str[i] - (a - A);} }char str[] "aBcDe"; cout << "str字符长度为: " << sizeof(str)/sizeof(str[…

IT综合管理 新时期的运维管理思路

IT运维管理给企业带来效益已经有十余载的历史&#xff0c;IT部门也逐步成为为企业的重要支撑部门&#xff0c;通过IT部门管理好企业的网络、桌面、业务、机房环境以及其他IT资源。虽然IT运维管理已经给企业带来了节能增效的实际效益&#xff0c;但这些效益正增着IT规模的与日俱…

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

摘要&#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的产品相关的同学提供一些帮助。 首先说说一…

每日一题(40)—— 字符串常量

下列代码有什么问题&#xff1f; char* s"AAA"; printf("%s",s); s[0]B; printf("%s",s);"AAA"是字符串常量。s是指针&#xff0c;指向这个字符串常量&#xff0c;所以声明s的时候就有问题。 cosntchar* s"AAA"; 然后又因…

下一个天亮

下一个天亮&#xff0c;我们依然是最好的搭档。最初的梦想&#xff0c;永远也从来不曾放弃。谢谢你教会我成长&#xff0c;谢谢你给我的一切。我们要永远这么好下去。加油哦。原来有些话真的只适合烂在心底。我能选择的&#xff0c;从始至终的唯一选择&#xff0c;只有坚强&…

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

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

maven详解之仓库

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