关于LPCTSTR,刚才看别人的帖子发现的一个问题

King_hhuang 2011-03-24 02:35:22
以下四种用法,结果是一样的,而且我查了一下
LPCTSTR:常量的TCHAR指针。定义为:typedef const char* LPCTSTR
下面四种用法,结果都一样:

1.char a[100]="12345";
CString str1=(LPCTSTR)&a;

2.char a[100]="12345";
CString str1=(LPCTSTR)a;

3.char a[100]="12345";
CString str1=(const char*)&a;

4.char a[100]="12345";
CString str1=(const char*)a;

AfxMessageBox(str1)都是“12345”

不过如果把a定义成指针char* a ="12345";
结果就不一样啦
只有2、4的结果是对的,1,3虽然不对,但是编译也没有报错,弹出来的是乱码,应该是a指针的地址;我知道指针和数组名是有区别的,但是上面四个赋值为啥结果都一样呢,谁能告诉我const char*和LPCTSTR是怎么实现强制转换的

谁解释一下原因?

...全文
110 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
jixiang1983 2011-03-24
  • 打赏
  • 举报
回复
char * a= "12345";
a的值,是指向的字符串"12345"的首地址, &a的值是指针自身的地址
对于char a[100] = "12345";
a和&a都是数组的首地址,也就是"12345"的首地址

King_hhuang 2011-03-24
  • 打赏
  • 举报
回复
好的,明白了,谢谢!
cpp2017 2011-03-24
  • 打赏
  • 举报
回复
CString str1 =(char*)&a; 这样就可 以了
cpp2017 2011-03-24
  • 打赏
  • 举报
回复
char a[100]="12345";



3. CString str1 = &a;

这里出错是编译出错,因为CString没有这个的操作符重载

King_hhuang 2011-03-24
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 cpp2017 的回复:]
对于数组,访问变量就是访问首个元素的指针,所以这个&可有可无。

1.3.不对是因为
char* a ="12345";
这个时候a 是已经是个指针了,再加个&那就是个指针的指针,&a 其实就是相当于int*,因为内存地址是int的。

而当a是数组的时候char a[100]  &a 相当于char*
[/Quote]
用指针不对我能理解,关键是a数组的时候,a、&a、&a[0]为啥有时候可以通用,有时又不行,比如在CString中
cpp2017 2011-03-24
  • 打赏
  • 举报
回复
对于数组,访问变量就是访问首个元素的指针,所以这个&可有可无。

1.3.不对是因为
char* a ="12345";
这个时候a 是已经是个指针了,再加个&那就是个指针的指针,&a 其实就是相当于int*,因为内存地址是int的。

而当a是数组的时候char a[100]  &a 相当于char*
King_hhuang 2011-03-24
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 greatws 的回复:]
char a[100];这是数组,直接使用a,编译器会认识为地址,也就相当于&a,也相当于&a[0]
char* a本身就是指针,如果&a就是这个指针存放的地址,显然和a直接用不一样,所以1,3不成立。但是可以&a[0]这样用。
[/Quote]
这个回答好像比较接近,那我在问一下:
char a[100]="12345";
1. CString str1 = &a[0];
2. CString str1 = a;
3. CString str1 = &a;
为什么1、2都可以,3就出错呢?
按照你的说法&a应该相当于&a[0],它不应该出错啊?
greatws 2011-03-24
  • 打赏
  • 举报
回复
char a[100];这是数组,直接使用a,编译器会认识为地址,也就相当于&a,也相当于&a[0]
char* a本身就是指针,如果&a就是这个指针存放的地址,显然和a直接用不一样,所以1,3不成立。但是可以&a[0]这样用。
qiuxin425 2011-03-24
  • 打赏
  • 举报
回复
&a取得就是首地址的元素 而不是全部拉
Dreadnought 2011-03-24
  • 打赏
  • 举报
回复
http://www.cnblogs.com/sunnyjones/archive/2009/02/24/1397538.html
King_hhuang 2011-03-24
  • 打赏
  • 举报
回复
问题不是这个,问题是为啥上面4中用法都ok?
无水先生 2011-03-24
  • 打赏
  • 举报
回复
char* a ="12345";
改成

TCHAR *a

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧