首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

求教输出指针指向的内存的有关问题

2012-03-30 
求教输出指针指向的内存的问题void funcmem(void *p,int iSize){/*以16进制的方式,打印p指向的内存块一共

求教输出指针指向的内存的问题
void funcmem(void *p,int iSize)
{
/*
以16进制的方式,打印p指向的内存块
一共打印iSize个字节
*/

}

int main()
{
int i=123;
char *s="abc";
funcmem(main,40);
return 0;
}

[解决办法]

探讨
首先谢谢!
int i;
for(i = 0; i < iSize; i++) {
printf("p+i=%p\n", (unsigned char *)p+i);
}
但是有问题哦~~
这输出的是P的地址啊,要输出P指向的内存的内容~!

[解决办法]
不知你用什么编译器.我用VS2008得到的结果是
55 8b ec 83 ec 08 c7 45 fc 7b 00 00 00 c7 45 f8 5c a1 40 00 6a 28 68 50 10 40 00
e8 90 ff ff ff 83 c4 08 33 c0 8b e5 5d
然后用ollygdb调试了一下.结果是正确的:

00401050 /$ 55 PUSH EBP
00401051 |. 8BEC MOV EBP,ESP
00401053 |. 83EC 08 SUB ESP,8
00401056 |. C745 FC 7B000000 MOV DWORD PTR SS:[EBP-4],7B
0040105D |. C745 F8 5CA14000 MOV DWORD PTR SS:[EBP-8],t.0040A15C ; ASCII "abc"
00401064 |. 6A 28 PUSH 28 ; /Arg2 = 00000028
00401066 |. 68 50104000 PUSH t.00401050 ; |Arg1 = 00401050
0040106B |. E8 90FFFFFF CALL t.00401000 ; \t.00401000
00401070 |. 83C4 08 ADD ESP,8
00401073 |. 33C0 XOR EAX,EAX
00401075 |. 8BE5 MOV ESP,EBP
00401077 |. 5D POP EBP
00401078 \. C3 RETN


[解决办法]
楼主,帮你稍微改了一下程序,你分别跑一下debug和release,就能有个感性的认识了。
深入下去的话,去看编译原理吧。

C/C++ code
#include <stdio.h>void funcmem(void *p,int iSize){    /*    以16进制的方式,打印p指向的内存块    一共打印iSize个字节    */        for(int i=0; i<iSize; i++)    {        printf("%c ", *((unsigned char*)p+i));    }    printf("\n\n");}int main(){    int i=123;    char *s="abc";    char *s2="xyz";        printf("main[%d]:\n", (int)main);    funcmem(main, 40);    printf("funcmem[%d]:\n", (int)funcmem);    funcmem(funcmem, 40);    printf("s[%d]:\n", (int)s);    funcmem(s, 40);    printf("s2[%d]:\n", (int)s2);    funcmem(s2, 40);    printf("i[%d]:\n", (int)(&i));    funcmem(&i, 40);    getchar();    return 0;} 

热点排行