指针问题求助
若有定义int a,*p=&a;char *t; 则执行语句t=p;后t指向a。对错及其理由
没错,理由是这两个指针是指向同一个地址但是类型不同(他们看数据的角度不同)。 在编译block::code 上使用.c后缀文件可以编译,执行,但有一个warnging,意思是指针*p,与*指针p的类型不符。输出结果是一样的。 haovcf 发表于 2014-6-14 01:12 static/image/common/back.gif
在编译block::code 上使用.c后缀文件可以编译,执行,但有一个warnging,意思是指针*p,与*指针p的类型不符 ...
能从原理上分析下吗,万恶的C语言考试,竟然不上机考。 本帖最后由 santaclaus 于 2014-6-14 09:34 编辑
int a=0x12345678
你的问题跟大小端有关,下面以小端存储为例:
内存情况(从低地址到高地址)为:
内存: 78563412(共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
}
santaclaus 发表于 2014-6-14 09:30 static/image/common/back.gif
int a=0x12345678
你的问题跟大小端有关,下面以小端存储为例:
有点懂了:dizzy:再理解理解
其实说实话,你可以去看看汇编,对指针之类的理解还是有帮助的 希望对你有帮助。 Edward.L 发表于 2014-6-27 16:52 static/image/common/back.gif
希望对你有帮助。
恩恩
谢了
页:
[1]