社区
C语言
帖子详情
error C2102: '&' requires l-value
yourcarol
2005-04-19 09:11:36
#include <stdio.h>
//#include <iostream>
struct User
{
char name[9];
int age;
};
void main()
{
struct User *a;
unsigned long i = &(unsigned long)a;
printf("%l",i);
}
就是这个东东,找了很长时间没有看到解决的方法;
请师兄们帮忙看看!
谢谢!
...全文
1293
13
打赏
收藏
error C2102: '&' requires l-value
#include //#include struct User { char name[9]; int age; }; void main() { struct User *a; unsigned long i = &(unsigned long)a; printf("%l",i); } 就是这个东东,找了很长时间没有看到解决的方法; 请师兄们帮忙看看! 谢谢!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
AAA235
2005-07-19
打赏
举报
回复
你在MFC中编译肯定不能通过,会报error c2102: requires l-value
yourcarol
2005-04-20
打赏
举报
回复
这里想请搂主解释一下右值的概念!
谢谢!
yourcarol
2005-04-20
打赏
举报
回复
我看的是发表在VC知识库的在线杂志第27期上面的一文章:
//http://www.vckbase.com/vckbase/index2.html
//可以在这里下载;
大型作业答辩:C/S考试系统程序制作详解;
这个是定义的结构:
struct ContextKey
{
SOCKET sock;
char InBuffer[4];
OVERLAPPED ovIn;
int nOutBufIndex;
char OutBuffer[MAXLINE];
OVERLAPPED ovOut;
DWORD dwWritten;
};
struct ContextKey *pCntx;
UNREFERENCED_PARAMETER(pVoid);
bResult = GetQueuedCompletionStatus(
ghCompletionPort,
&dwNumRead,
&(DWORD)pCntx,
&lpOverlapped,
INFINITE
);
在GetQueuedCompletionStatu()函数中的为什么第三个参数可以编译通过,但是我写的就不可以!
我和同事百思不得其解,所有的设定也都看了,为什么原理上不可行的东西却偏偏可以编译通过!
不知道是哪里出了问题?
还请大家一起探讨一下!
fjjfxz
2005-04-20
打赏
举报
回复
左值表达式就是可以出现在赋值号左边的式子,即有地址,代表着某一内存单元。
右值表达式就是只能出现在赋值号右边的式子,当然,左值同时也可以是一个右值表达式
Maxwell
2005-04-19
打赏
举报
回复
你应该把&放到a的前面,先把a的地址取出来,然后把这个地址转换成unsigned long。
要打印地址不是有个%p吗,用那个比这样方便。
zengwujun
2005-04-19
打赏
举报
回复
struct User *a;
unsigned long i = (unsigned long)(&a);
printf("%ld",i);
kobefly
2005-04-19
打赏
举报
回复
回复人: yourcarol(闪光的美学) ( ) 信誉:100 2005-04-19 09:55:00 得分: 0
a实际上是一个地址,我这里只是将它转换为了unsigned long类型,然后去地址的地址;
从头看过来;我定义了一个结构,然后用它声明了一个变量;用一个指针a指向他,然后在取这个指针的地址,是不是这个指针a的地址由问题!
这样有什么问题?
我看到一个强人这样做了!
但是我写就有问题!
上google去搜索都是外文的!
呵呵
你的想法没有错,但是
你可以
unsigned long i = &a;
你却不可以
unsigned long i = &(unsigned long)a;
为什么?
因为unsigned long)a是将a转换为一个unsigned long,结果放在哪里呢?
是a中吗,不是,a的值并不会变,所以只能存放在一个临时变量中
临时变量的地址可以确定吗?
不可以
所以
你的操作就不ok了
zhangfjj
2005-04-19
打赏
举报
回复
问题是
&(unsigned long)a ===>相当于
&((unsigned long)a)也就是把地址转换为unsigned long,此时它是一个值了
就是取出a的值,转换为一个unsigned long,并不是直接改变a的属性
就如:float x=3.5;
(int)x 即取出x的值3.5,转化为int,即值为3,但x并不变
int main()
{
float x=3.5;
int y;
y=(int)x;
cout<<"y="<<y<<",x="<<x<<endl;
return 0;
}
yourcarol
2005-04-19
打赏
举报
回复
a实际上是一个地址,我这里只是将它转换为了unsigned long类型,然后去地址的地址;
从头看过来;我定义了一个结构,然后用它声明了一个变量;用一个指针a指向他,然后在取这个指针的地址,是不是这个指针a的地址由问题!
这样有什么问题?
我看到一个强人这样做了!
但是我写就有问题!
上google去搜索都是外文的!
junmayang
2005-04-19
打赏
举报
回复
&只能对左值表达式求值
晨星
2005-04-19
打赏
举报
回复
哦,新版主就是高!
zhangfjj
2005-04-19
打赏
举报
回复
&只能对左值表达式求地址
(unsigned long)a经强制转换后成了一个右值
dongpy
2005-04-19
打赏
举报
回复
unsigned long i = &(unsigned long)a;
=======================
(unsigned long)a强制转换,产生unsigned long类型的临时变量,临时变量不能取地址。
一次性搞定数据库事务
第五部分:彻底搞清楚Spring事务的7种传播级别的原理和使用:PROPAGATION_
REQUIRE
D、PROPAGATION_SUPPORTS、PROPAGATION_MANDATORY、PROPAGATION_
REQUIRE
S_NEW、PROPAGATION_NOT_SUPPORTED、PROPAGATION_NEVER、...
error
C2102
: ‘&‘
require
s l-
value
这个错误通常是因为你尝试对一个非左值(r-
value
)进行取地址操作。在 C++ 中,左值是可以被取地址的,而右值则不能。如果你仍然遇到这个错误,可以将代码贴出来,我们一起来看看问题所在。// 对左值 a 进行取地址...
c语言 prototype_求C语言高手解答
error
C267: 'Tdelay':
require
s ANSI-style prototype问题!
uchar temp_
value
,temp1_
value
; uchar aa,bb,cc,flag; uchar code table[]={ 0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f, 0xbf,0x86,0xdb,0xcf,0xe6, 0xed,0xfd,0x87,0xff,0xef}; uint tempr=25; void ...
c语言出现错误如何改,C语言程序出错
error
C2109、
error
C2102
、
error
C2064 如何修改?...
C语言程序出错
error
C2109、
error
C2102
...0brave_ice2016.10.14浏览56次分享举报错误: cpp(18) :
error
C2109: subscript
require
s array or pointer type cpp(18) :
error
C2102
: '&'
require
s l-
value
cpp(19)...
C语言
69,394
社区成员
243,080
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章