弱弱的问一个C语言问题

_Mamahoohoo 发布于 2016/09/27 10:21
阅读 247
收藏 0
#include <stdio.h>
#include <string.h>
typedef unsigned char *byte_pointer;

void show_bytes(byte_pointer start, int len)
{
	int i;
	for(i=0;i<len;i++)
	  printf("%.2x",start[i]);
	  printf("\n");
}
int main()
{
   const char *s="12345";
   show_bytes((byte_pointer)s,strlen(s));

}

为什么输出的结果是ascii码,而不是存放这些字符的地址呢?



加载中
0
司徒永超
司徒永超
因为 start[i] 的类型是 unsigned char,存的是字符的ASCII值,可以改用 start + i,或者 &start[i]。
司徒永超
司徒永超
看漏 了 typedef,start[i] 类型是 unsigned char。
0
szwx855
szwx855

好久没有用C了。。

不过看起来你想打印地址,试试在

printf("%.2x",start[i]);

改成

printf("%.2x",&start[i]);

0
乌龟壳
乌龟壳

start[i]等于*(start + i)

0
逐浪人
逐浪人
 printf("%.2x,",&start[i]);

0
大馋猫
大馋猫

start本身是unsigned char *类型,也就是指向字符的指针,当使用start[i]的形式访问的时候,实际上做的是*(start+i)操作,假如start的地址是0x00000001, 那么start+1的地址就是0x00000002,然后*运算是取地址所指向的内容,也就是地址0x00000002所指向的内容,也就是字符2,所以最后打印的是这几个字符的ascii,而不是地址。

0
_Mamahoohoo
_Mamahoohoo
恩恩,谢谢大家,忘记了字符的存储形式是ASCII码了,应该补一下指针和数组了,经常被整懵。
返回顶部
顶部