这个小问题是在今天学习Linux系统编程的时候出现的。
在Vim下写mmap()
函数的时候,mmap()
是返回的是void*
类型,在创建映射区成功的时候会返回映射区首地址,要往映射区进行字符串的读写操作,因此我们尝试使用char*
类型的指针p去指向mmap()
,这里出现了第一个问题:
mmap.cc:14:13: error: invalid conversion from ‘void*’ to ‘char*’ [-fpermissive]
p = mmap(NULL,len,PROT_READ|PROT_WRITE,MAP_SHARED,fd ,0);
原来g++下不支持void*
隐式转换成char*
,需要进行强制转换:
char *p = NULL;
p = static_cast<char*>(mmap(NULL,len,PROT_READ|PROT_WRITE,MAP_SHARED,fd ,0));
如此一来,编译就成功了!
再进行映射区的读写操作时,发现使用cout p
便可以进行读操作:
cout<< p <<endl;
和以前遇到的情况不太一样,因此查了一下,发现:
按照以往给cout
一个指针,它输出的是指针所指向的地址,但是如果指针是char *
类型的,cout
会直接输出char *
指针所指向的字符串。
因此,如果要显示char *
指针所指向的地址,把char *
类型的指针强制转化为int *
类型的指针即可解决:
cout<< (int *)p <<endl;
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。