【3D技术宅公社】XR数字艺术论坛  XR技术讨论 XR互动电影 定格动画

 找回密码
 立即注册

QQ登录

只需一步,快速开始

调查问卷
论坛即将给大家带来全新的技术服务,面向三围图形学、游戏、动画的全新服务论坛升级为UTF8版本后,中文用户名和用户密码中有中文的都无法登陆,请发邮件到324007255(at)QQ.com联系手动修改密码

3D技术论坛将以计算机图形学为核心,面向教育 推出国内的三维教育引擎该项目在持续研发当中,感谢大家的关注。

查看: 3116|回复: 0

[转帖]c语言中的字符数组和char 指针

[复制链接]
发表于 2007-12-13 17:50:57 | 显示全部楼层 |阅读模式
华为转正的题目:             
file1.c
char g_table[100] = {0,1,2,3,4};
file2.c
extern char* g_table;
main()
{
  printf("%x", g_table)
}
 
与sun公司的一道面试题基本上一样

/* file1.c */

char buff[128];


/* file2.c */

extern char *buff; /* Notice: extern char buff[] */


int main()

{

*buff = 'a';

return 0;

}
结果如下:
$ gcc file1.c -c
$ gcc file2.c -c
$ gcc file1.o file2.o -o ff
$ ./ff
Segmentation Fault

 

解释:

1.数组名只是一个符号,不会被分配存储空间。而char *声明的是一个指针变量,会被分配空间。

2.当将数组名被外部引用声明为字符指针的时候,这个指针变量的存储空间就是数组的前四个字符(因为一般的地址为4个字节)

3.结果分析:华为的输出应为前四个元素的ASC值的十六进制表示,SUN公司的面试题应该是由于buf的内容是一个无效的地址,所以*buf取buf所指向存储单元的内容的时候会报错。


/* file2.c */

extern char *buff; /* Notice: extern char buff[] */


int main()

{

*buff = 'a';

return 0;

}
结果如下:
$ gcc file1.c -c
$ gcc file2.c -c
$ gcc file1.o file2.o -o ff
$ ./ff
Segmentation Fault

 

解释:

1.数组名只是一个符号,不会被分配存储空间。而char *声明的是一个指针变量,会被分配空间。

2.当将数组名被外部引用声明为字符指针的时候,这个指针变量的存储空间就是数组的前四个字符(因为一般的地址为4个字节)

3.结果分析:华为的输出应为前四个元素的ASC值的十六进制表示,SUN公司的面试题应该是由于buf的内容是一个无效的地址,所以*buf取buf所指向存储单元的内容的时候会报错。

 

 a数组中存'abcd'                                         字符指针

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|3D数字艺术论坛 ( 沪ICP备14023054号 )

GMT+8, 2025-5-6 16:57

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表