赞助连接

赞助连接

阅 读 文 章

请教一下这个代码的错误

[来源:网上转载 (http://bbs.chinaunix.net) | 作者:网友(网络转载) | 时间:2008-06-14 | 浏览:人次 ]



[Copy to clipboard] [ - ]CODE:#include<stdio.h>

typedef struct A
{
   int i;
   char *p;
}A;

void main()
{
   A a;
   int *p = &a.i;
   p[0] = 1;
   p[1] = 2;
   a.p = p;
   a.p[0] = 1;
   a.p[1] = 2;
}



typedef struct A
{
   int i;
   char *p;
}A;

?


char *   != int *


这程序,你可以说没有错误,也可以说错误一大堆。关键看楼主想干什么了。




QUOTE:原帖由 Sorehead 于 2008-6-13 13:50 发表
这程序,你可以说没有错误,也可以说错误一大堆。关键看楼主想干什么了。
面试题


p[0] = 1;
p[1] = 2;
会不会出现内存非法访问?




QUOTE:原帖由 aaaab 于 2008-6-13 13:21 发表
#include

typedef struct A
{
   int i;
   char *p;
}A;

void main()
{
   A a;
   int *p = &a.i;
   p[0] = 1;
   p[1] = 2;
   a.p = p;
   a.p[0] = 1;
   a.p[1] = 2;
}

代 *** 不会产生错误,但是就是不知道你为什么这么写。

int *p = &a.i ; //让p指向a这个结构体的i元素,其实也就是指向这个结构体的开头
p[0] = 1;
p[1] = 2; // 这两行分别将a.i赋为1,a.p赋为2
a.p = p; // 让a.p指向这个结构体的开头,因此不管什么类似的指针,在现在这种情况下都为4字节,因此不会产生越界。
a.p[0] = 1;
a.p[1] = 2; //由于a.p是一个char类型的指针,因此,此时的a.p[0], a.p[1]都分别是对a.i 这个元素的两个字节进行赋值。 在我的系统上,由于是小端字节序,因此,最后i的值就为0x201

故, 整个过程不会产生内存访问错误。




QUOTE:原帖由 scutan 于 2008-6-13 15:53 发表




代 *** 不会产生错误,但是就是不知道你为什么这么写。

int *p = &a.i ; //让p指向a这个结构体的i元素,其实也就是指向这个结构体的开头
p[0] = 1;
p[1] = 2; // 这两行分别将a.i赋为1,a.p赋为2
a. ...
受教了,多谢!




QUOTE:原帖由 scutan 于 2008-6-13 15:53 发表




代 *** 不会产生错误,但是就是不知道你为什么这么写。

int *p = &a.i ; //让p指向a这个结构体的i元素,其实也就是指向这个结构体的开头
p[0] = 1;
p[1] = 2; // 这两行分别将a.i赋为1,a.p赋为2
a. ...
面试改错题
TAG标签 : 错误 代码 这个 请教 a.p a.i int // 结构 指向 赋为

最新评论 共有0位网友发表了评论

发表评论

评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名:(注册)
密码:
验证码:
匿名发表
网站地图友情连接交流论坛网站投稿广告服务联系我们留言本站长统计
Some rights reserved: www.chmhome.com, 鄂ICP备07010232号 E-mail:chinakafei@live.com,QQ:552766
中国咖啡技术网(Chmhome):国外编程技术书籍,中文编程手册,经典编程文章,交流技术,技术软件下载,计算机论文,毕业论文.