C语言关于数组指针的问题(linux下的gcc环境)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言关于数组指针的问题(linux下的gcc环境)相关的知识,希望对你有一定的参考价值。

#include<stdio.h>
main()

int a[3][4]=0,1,2,3,4,5,6,7,8,9,10,11;
printf("%d,",a);
printf("%d,",*a);
printf("%d,",a[0]);
printf("%d,",&a[0]);
printf("%d\n",&a[0][0]);
printf("%d,",a+1);
printf("%d,",*(a+1));
printf("%d,",a[1]);
printf("%d,",&a[1]);
printf("%d\n",&a[1][0]);
printf("%d,",a+2);
printf("%d,",*(a+2));
printf("%d,",a[2]);
printf("%d,",&a[2]);
printf("%d\n",&a[2][0]);
printf("%d,",a[1]+1);
printf("%d\n",*(a+1)+1);
printf("%d,%d\n",*(a[1]+1),*(*(a+1)+1));


-------------------------
以上是例题的某段程序,我在编译的时候出错了,错误信息在下边,我不明白到底有什么错

ex1.c: In function ‘main’:
ex1.c:7: warning: format ‘%d’ expects type ‘int’, but argument 2 has type ‘int (*)[4]’
ex1.c:8: warning: format ‘%d’ expects type ‘int’, but argument 2 has type ‘int *’
ex1.c:9: warning: format ‘%d’ expects type ‘int’, but argument 2 has type ‘int *’
ex1.c:10: warning: format ‘%d’ expects type ‘int’, but argument 2 has type ‘int (*)[4]’
ex1.c:11: warning: format ‘%d’ expects type ‘int’, but argument 2 has type ‘int *’
ex1.c:12: warning: format ‘%d’ expects type ‘int’, but argument 2 has type ‘int (*)[4]’
ex1.c:13: warning: format ‘%d’ expects type ‘int’, but argument 2 has type ‘int *’
ex1.c:14: warning: format ‘%d’ expects type ‘int’, but argument 2 has type ‘int *’
ex1.c:15: warning: format ‘%d’ expects type ‘int’, but argument 2 has type ‘int (*)[4]’
ex1.c:16: warning: format ‘%d’ expects type ‘int’, but argument 2 has type ‘int *’
ex1.c:17: warning: format ‘%d’ expects type ‘int’, but argument 2 has type ‘int (*)[4]’
ex1.c:18: warning: format ‘%d’ expects type ‘int’, but argument 2 has type ‘int *’
ex1.c:19: warning: format ‘%d’ expects type ‘int’, but argument 2 has type ‘int *’
ex1.c:20: warning: format ‘%d’ expects type ‘int’, but argument 2 has type ‘int (*)[4]’
ex1.c:21: warning: format ‘%d’ expects type ‘int’, but argument 2 has type ‘int *’
ex1.c:22: warning: format ‘%d’ expects type ‘int’, but argument 2 has type ‘int *’
ex1.c:23: warning: format ‘%d’ expects type ‘int’, but argument 2 has type ‘int *’
我也知道提示是说类型不匹配,不过我看的是谭浩强的书,他说这是可以的,而且这个程序还是例题的。。。
---------------------
-1079347568,-1079347568,-1079347568,-1079347568,-1079347568
-1079347552,-1079347552,-1079347552,-1079347552,-1079347552
-1079347536,-1079347536,-1079347536,-1079347536,-1079347536
-1079347548,-1079347548
5,5
这是程序运行结果。。。和预期的完全不一样
只有最后一行没有warning提示的句子能正确输出,其他的都有问题,怎么回事?

这些都是类型不一致的警告,系统依然会生成可执行文件,在这个程序中可以忽略这些警告信息,可以用带-w参数的gcc编译这个文件,就不会输出这些警告信息了。

*************************************************

你用的GCC版本是多少?在4.2.4中不会输出警告。

*************************************************

如果打算在LINUX系统中学习C语言,或者打算真正掌握C语言的精华,而不是为了应付考试,就不要用这本书,这本书不是为真正学习C语言的人准备的,而是给为过考试的人设计的,里面的内容太粗糙了!而且这本书的调试环境是TC2或者VC++6.0,二者对ANSI C的支持都很差,而GCC则是对ANSI C支持最强的,所以一些在TC2或者VC++6.0中看起来正常的不标准的C程序在GCC的眼中当然会错误百出。
参考技术A 里面很多类型都不匹配~ 参考技术B 类型转换错误 跟着提示改就好了 参考技术C gcc 编译器比较严格,出现的都是警告。没事的

以上是关于C语言关于数组指针的问题(linux下的gcc环境)的主要内容,如果未能解决你的问题,请参考以下文章

指针与数组的缘定今生

一个关于C语言的指针与二维数组的问题

如何使用Notepad++和GCC搭建Windows下的C语言学习环境

Linux 环境下的C语言, 关于 kill 发送信号和 signal() 函数, 具体问题在以下代码的注释处

C语言中关于二维数据指针的问题?

如何使用Notepad++和GCC搭建Windows下的C语言学习环境