扫描二维码
获取更多精彩
嵌入式杂牌军
编辑|追梦星空
公众号|嵌入式杂牌军
✎ 编 者 悟 语
正当性的出发点应该是少目的性、不带偏见、以尊重为前提的多方考虑。
文 章 导 读
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
微信扫描二维码,关注我的公众号