您当前的位置: 首页 > 

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

发布时间:2021-06-16 08:14:38 ,浏览量:0

扫描二维码

获取更多精彩

嵌入式杂牌军

                                                  编辑|追梦星空

                                            公众号|嵌入式杂牌军

✎ 编 者 悟 语

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

文 章 导 读

    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 
#include 

int array[];                    // 声明一下file2.c中对应的数组


/* file2.c */

#include 
#include 
#include "file2.h"              // 在对应的头文件进行声明 

int array[128] = {1,2,3,4,5};   // 在此处定义数组

/* file1.c */

#include 
#include 
#include "file2.h"   

extern int array[];             // 此种声明是能与int array[]对应上的 

int main(int argc, char *argv[]) 
{
     printf("\n%d\n",array[1]);// 可以得到数据2

     return 0;
}

    运行结果:

    2)定义数组,声明指针

    直接编译不过。

/* file2.h */
#include 
#include 

int array[];                     // 声明一下file2.c中对应的数组int array[128]

/* file2.c */

#include 
#include 
#include "file2.h"              // 在对应的头文件进行声明 

int array[128] = {1,2,3,4,5};   // 在此处定义数组

/* file1.c */

#include 
#include 
#include "file2.h"   

extern *array;                  // 此种声明是与int array[]对应不上的,编译直接报错

int main(int argc, char *argv[]) 
{
 
      printf("%d",array[1]);   
 
      return 0;
}

    编译结果:

    3)声明时指针不匹配

    直接编译不过。

/* file2.h */

#include 
#include 

int array[];                    // 声明一下file2.c中对应的数组int array[128]


/* file2.c */

#include 
#include 
#include "file2.h"              // 在对应的头文件进行声明 

int array[128] = {1,2,3,4,5};   // 在此处定义数组


/* file1.c */

#include 
#include 
#include "file2.h"   

extern float array[];          // 此种声明float与int类型不对应,直接编译报错 

int main(int argc, char *argv[]) 
{
 
      printf("%f",array[1]);
 
      return 0;
}

    运行结果:

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

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

/* file2.h */

#include 
#include 

char *array;                    // 声明一下file2.c中对应的数组char *array


/* file2.c */

#include 
#include 
#include "file2.h"              // 在对应的头文件进行声明 

char *array = "abcdefg";        // 在此处定义数组


/* file1.c */

#include 
#include 
#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

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

关注
打赏
1688896170
查看更多评论

暂无认证

  • 0浏览

    0关注

    106365博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录

0.2163s