指针和数组错用的问题汇总
2013-02-22 23:37
176 查看
指针和数组名容易用错,本文记录常见的错误。
错误用法一、定义时是数组,在其他文件中声明为指针。
file a.c 中,定义b是一个数值:
文件 b.c 中声明b为指针:
文件 main.c
在cygwin中运行结果如下:
h@he-c9c1ddb921eb ~/test/ptr-array
$ gcc -mbig -o test a.c b.c main.c
$ ./test
in a.c, b=0x402000, first addr=0x402000
in b.c, b=0x34333231
总结一下:
在a.c中定义的数组,其数组名(b)只是一个名字,不占用物理的内存区域,只是编译、运行时代表数组的起始地址;
而在b.c中认为b是一个全局变量,指针类型的全局变量,所以,打印b的值,就是打印指针变量中存储的值,所以,就是字符'1','2','3','4'组成的数字。
其实,如果在b.c中打印 &b的值(printf("in b.c, b=0x%x &b=0x%x\n", b, &b);),得到的数值也是0x402000, 如下:
h@he-c9c1ddb921eb ~/test/ptr-array
$ ./test
in a.c, b=0x402000, first addr=0x402000
in b.c, b=0x34333231 &b=0x402000
问题解决、规避方法:
在头文件 a.h 中对外声明 extern char b[], 其他源文件,凡是需要使用b的,只能包含头文件a.h ,不允许显式的extern ...
错误用法一、定义时是数组,在其他文件中声明为指针。
file a.c 中,定义b是一个数值:
#include <stdio.h> char b[4] = {'1', '2', '3', '4'}; void printinfilea(void) { printf("in a.c, b=0x%x, first addr=0x%x \n", b, &b[0]); return; }
文件 b.c 中声明b为指针:
#include <stdio.h> extern char *b; void printinfileb(void) { printf("in b.c, b=0x%x \n", b); return; }
文件 main.c
#include <stdio.h> int main() { printinfilea(); printinfileb(); return 0; }
在cygwin中运行结果如下:
h@he-c9c1ddb921eb ~/test/ptr-array
$ gcc -mbig -o test a.c b.c main.c
$ ./test
in a.c, b=0x402000, first addr=0x402000
in b.c, b=0x34333231
总结一下:
在a.c中定义的数组,其数组名(b)只是一个名字,不占用物理的内存区域,只是编译、运行时代表数组的起始地址;
而在b.c中认为b是一个全局变量,指针类型的全局变量,所以,打印b的值,就是打印指针变量中存储的值,所以,就是字符'1','2','3','4'组成的数字。
其实,如果在b.c中打印 &b的值(printf("in b.c, b=0x%x &b=0x%x\n", b, &b);),得到的数值也是0x402000, 如下:
h@he-c9c1ddb921eb ~/test/ptr-array
$ ./test
in a.c, b=0x402000, first addr=0x402000
in b.c, b=0x34333231 &b=0x402000
问题解决、规避方法:
在头文件 a.h 中对外声明 extern char b[], 其他源文件,凡是需要使用b的,只能包含头文件a.h ,不允许显式的extern ...
相关文章推荐
- 数组指针问题
- 你必须知道的指针基础-4.sizeof计算数组长度与strcpy的安全性问题
- CString 及char 指针和数组的问题(转)
- (转)数组名与指针问题
- 数组、数组名和指针问题
- 关于数组做函数参数的问题集合汇总
- 小小的C语言问题指针数组赋值----关于指针和数组。
- 关于数组做函数参数的问题汇总
- 字符串常量保存问题与字符数组和字符指针区分
- C# 调用DLL多级指针和多维数组问题。
- 利用指针输出数组时发现一个问题,还请指教
- 指针,数组,连续开辟空间的地址分配和读取问题
- 【问题汇总】列表数组越界的问题
- 数组拷贝问题,实际上是指针指向发生变化
- 字符指针与字符数组的存储问题
- c语言字符指针数组经典,此后不必再担心字符串问题.
- 指针的问题4 不一样的数组指针
- 数组首地址给赋给 指针的问题
- 指针、数组和函数的嵌套问题
- 字符数组与字符指针赋初值问题