鱼C论坛

 找回密码
 立即注册
查看: 2242|回复: 8

指针问题求助

[复制链接]
发表于 2014-6-13 22:15:33 | 显示全部楼层 |阅读模式
5鱼币
若有定义int a,*p=&a;  char *t; 则执行语句t=p;后t指向a。
对错及其理由

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-6-13 22:38:41 | 显示全部楼层
没错,理由是这两个指针是指向同一个地址但是类型不同(他们看数据的角度不同)。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-6-14 01:12:31 | 显示全部楼层
在编译block::code 上使用.c后缀文件可以编译,执行,但有一个warnging,意思是指针*p,与*指针p的类型不符。输出结果是一样的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-6-14 07:28:27 | 显示全部楼层

能从原理上分析下吗,万恶的C语言考试,竟然不上机考。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-6-14 09:30:38 | 显示全部楼层
本帖最后由 santaclaus 于 2014-6-14 09:34 编辑

int a=0x12345678

你的问题跟大小端有关,下面以小端存储为例:
内存情况(从低地址到高地址)为:
内存: 78  56  34  12  (共4个字节)
指针:  p     //传不了图,自己想像一下,p指向“78”(低地址)开始的4个字节的内存单元(因其为int*型)
指针:  t      //t指向“78”(低地址)开始的1个字节的内存单元(因其为char*型)

#include<stdio.h>
void main()
{
        int a=0x12345678;
        int *p = &a; //p指向“78”单元开始的4个字节
        char *t;

        t = (char*)p; //要强制转换,t指向“78”那个单元(1字节)
        printf("%X\n",*t);  //输出 78
        printf("%X\n", *p); //输出12345678
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-6-14 23:02:46 | 显示全部楼层
santaclaus 发表于 2014-6-14 09:30
int a=0x12345678

你的问题跟大小端有关,下面以小端存储为例:

有点懂了:dizzy:再理解理解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-6-15 15:44:35 | 显示全部楼层
其实说实话,你可以去看看汇编,对指针之类的理解还是有帮助的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-6-27 16:52:14 | 显示全部楼层
希望对你有帮助。
QQ截图20140627165417.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-6-27 18:50:29 | 显示全部楼层
Edward.L 发表于 2014-6-27 16:52
希望对你有帮助。

恩恩
谢了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-24 13:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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