char *p;
(int *)p=a;
这里如何错了?
VC 6.0 报错原因
D:\VC++ 6.0\VC2009\Common\test.cpp(13) : error C2106: '=' : left operand must be l-value
22 个解决方案
#1
强制转换类型产生的是临时变量
不能给他赋值
不能给他赋值
#2
左值问题~
C/C++ 不支持这么写。。。
C/C++ 不支持这么写。。。
#3
好
#4
那谁知道怎样强制转换指针类型?
#5
int a[10]={1};
char *p;
p=(char *)a;
C里面指针类型不能变的
char *p;
p=(char *)a;
C里面指针类型不能变的
#6
正解
#7
#8
void类型的指针也不行吗?比如void *p
#9
void *其实这样理解,它是所有各种指针的范称,你可以将任意的指针都赋值个他
比如char *p;void *x;x = p;为什么能这样呢?首先在32位操作系统上任意指针大小都是4字节,你可以用
sizeof(void *)测试。指针其实也就是一个变量,这个变量里面存的都是4字节(32位)的整数。只是变量地址指向的内容各有差异吧了。
楼主的错误就是 楼上说的··
比如char *p;void *x;x = p;为什么能这样呢?首先在32位操作系统上任意指针大小都是4字节,你可以用
sizeof(void *)测试。指针其实也就是一个变量,这个变量里面存的都是4字节(32位)的整数。只是变量地址指向的内容各有差异吧了。
楼主的错误就是 楼上说的··
#10
error C2106: '=' : left operand must be l-value
left operand must be l-value是说:运算符的左边应该是一个“左值”。所谓“左值”就是指在程序中占用内存空间、可以被修改的量,比如各种变量。
而(int *)p,让p成为了一个临时变量非左值
#11
嗯,学习了啊。
#12
5楼正解。
#13
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
int a[10]={1};
char *p;
//(int *)p=a;
int* q = (int*)p;
return 0;
}
编译没问题,1楼,10楼回答正确,5楼回答错误,楼上的一些人你们难道不能实践一下?
int _tmain(int argc, _TCHAR* argv[])
{
int a[10]={1};
char *p;
//(int *)p=a;
int* q = (int*)p;
return 0;
}
编译没问题,1楼,10楼回答正确,5楼回答错误,楼上的一些人你们难道不能实践一下?
#14
int a[10]={1};
char *p;
*((int **))p=(int *)a;
char *p;
*((int **))p=(int *)a;
#15
VC调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编并单步执行一遍不就啥都明白了吗。
(Linux或Unix下应该也可以在用GDB调试时,看每句C对应的汇编并单步执行。)
想要从本质上理解C指针,必须学习汇编以及C和汇编的对应关系。
从汇编的角度理解和学习C语言的指针,原本看似复杂的东西就会变得非常简单!
指针即地址。“地址又是啥?”“只能从汇编语言和计算机组成原理的角度去解释了。”
提醒:
“学习用汇编语言写程序”
和
“VC调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编并单步执行一遍。
(Linux或Unix下应该也可以在用GDB调试时,看每句C对应的汇编并单步执行。)
想要从本质上理解C指针,必须学习C和汇编的对应关系。”
不是一回事!
(Linux或Unix下应该也可以在用GDB调试时,看每句C对应的汇编并单步执行。)
想要从本质上理解C指针,必须学习汇编以及C和汇编的对应关系。
从汇编的角度理解和学习C语言的指针,原本看似复杂的东西就会变得非常简单!
指针即地址。“地址又是啥?”“只能从汇编语言和计算机组成原理的角度去解释了。”
提醒:
“学习用汇编语言写程序”
和
“VC调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编并单步执行一遍。
(Linux或Unix下应该也可以在用GDB调试时,看每句C对应的汇编并单步执行。)
想要从本质上理解C指针,必须学习C和汇编的对应关系。”
不是一回事!
#16
lz 直接将 p 声明为 int* 不就行了,为何要先建一个超市,然后再将它改为食堂?
看看 强制转换的对象是谁?
#17
难道说
int a[10]={1},i=0;
void *p;
p=a;
for(i=0;i<10;i++)
cout<<*(p+i);
正确?
#18
我现在是不知道类型,要根据用户输入才能确定
#19
可以试下不定参数,本质是一个宏,要正确理解才能知道如何使用
代码像下面这样
void demo( int n, ... )
{
va_list argp; /* 定义保存函数参数的结构 */
int para; /* 存放取出的字符串参数 */
/* argp指向传入的第一个可选参数,
msg是最后一个确定的参数 */
va_start(argp,n);
while (n--)
{
para = va_arg(argp,char*);
printf("%s\n",para);
}
va_end( argp ); /* 将argp置为NULL */
}
int main()
{
demo(4,"1","111","3.0","4");
return 0;
}
代码像下面这样
void demo( int n, ... )
{
va_list argp; /* 定义保存函数参数的结构 */
int para; /* 存放取出的字符串参数 */
/* argp指向传入的第一个可选参数,
msg是最后一个确定的参数 */
va_start(argp,n);
while (n--)
{
para = va_arg(argp,char*);
printf("%s\n",para);
}
va_end( argp ); /* 将argp置为NULL */
}
int main()
{
demo(4,"1","111","3.0","4");
return 0;
}
#20
学习~~~
#21
c\c++交流群147325003
#22
++
楼主 error C2106: '=' : left operand must be l-value 这个错误明白不。
先看看最基本的书。 赋值怎么赋值, 谁应该放在=号左边谁应该放在=右右边
#1
强制转换类型产生的是临时变量
不能给他赋值
不能给他赋值
#2
左值问题~
C/C++ 不支持这么写。。。
C/C++ 不支持这么写。。。
#3
好
#4
那谁知道怎样强制转换指针类型?
#5
int a[10]={1};
char *p;
p=(char *)a;
C里面指针类型不能变的
char *p;
p=(char *)a;
C里面指针类型不能变的
#6
正解
#7
#8
void类型的指针也不行吗?比如void *p
#9
void *其实这样理解,它是所有各种指针的范称,你可以将任意的指针都赋值个他
比如char *p;void *x;x = p;为什么能这样呢?首先在32位操作系统上任意指针大小都是4字节,你可以用
sizeof(void *)测试。指针其实也就是一个变量,这个变量里面存的都是4字节(32位)的整数。只是变量地址指向的内容各有差异吧了。
楼主的错误就是 楼上说的··
比如char *p;void *x;x = p;为什么能这样呢?首先在32位操作系统上任意指针大小都是4字节,你可以用
sizeof(void *)测试。指针其实也就是一个变量,这个变量里面存的都是4字节(32位)的整数。只是变量地址指向的内容各有差异吧了。
楼主的错误就是 楼上说的··
#10
error C2106: '=' : left operand must be l-value
left operand must be l-value是说:运算符的左边应该是一个“左值”。所谓“左值”就是指在程序中占用内存空间、可以被修改的量,比如各种变量。
而(int *)p,让p成为了一个临时变量非左值
#11
嗯,学习了啊。
#12
5楼正解。
#13
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
int a[10]={1};
char *p;
//(int *)p=a;
int* q = (int*)p;
return 0;
}
编译没问题,1楼,10楼回答正确,5楼回答错误,楼上的一些人你们难道不能实践一下?
int _tmain(int argc, _TCHAR* argv[])
{
int a[10]={1};
char *p;
//(int *)p=a;
int* q = (int*)p;
return 0;
}
编译没问题,1楼,10楼回答正确,5楼回答错误,楼上的一些人你们难道不能实践一下?
#14
int a[10]={1};
char *p;
*((int **))p=(int *)a;
char *p;
*((int **))p=(int *)a;
#15
VC调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编并单步执行一遍不就啥都明白了吗。
(Linux或Unix下应该也可以在用GDB调试时,看每句C对应的汇编并单步执行。)
想要从本质上理解C指针,必须学习汇编以及C和汇编的对应关系。
从汇编的角度理解和学习C语言的指针,原本看似复杂的东西就会变得非常简单!
指针即地址。“地址又是啥?”“只能从汇编语言和计算机组成原理的角度去解释了。”
提醒:
“学习用汇编语言写程序”
和
“VC调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编并单步执行一遍。
(Linux或Unix下应该也可以在用GDB调试时,看每句C对应的汇编并单步执行。)
想要从本质上理解C指针,必须学习C和汇编的对应关系。”
不是一回事!
(Linux或Unix下应该也可以在用GDB调试时,看每句C对应的汇编并单步执行。)
想要从本质上理解C指针,必须学习汇编以及C和汇编的对应关系。
从汇编的角度理解和学习C语言的指针,原本看似复杂的东西就会变得非常简单!
指针即地址。“地址又是啥?”“只能从汇编语言和计算机组成原理的角度去解释了。”
提醒:
“学习用汇编语言写程序”
和
“VC调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编并单步执行一遍。
(Linux或Unix下应该也可以在用GDB调试时,看每句C对应的汇编并单步执行。)
想要从本质上理解C指针,必须学习C和汇编的对应关系。”
不是一回事!
#16
lz 直接将 p 声明为 int* 不就行了,为何要先建一个超市,然后再将它改为食堂?
看看 强制转换的对象是谁?
#17
难道说
int a[10]={1},i=0;
void *p;
p=a;
for(i=0;i<10;i++)
cout<<*(p+i);
正确?
#18
我现在是不知道类型,要根据用户输入才能确定
#19
可以试下不定参数,本质是一个宏,要正确理解才能知道如何使用
代码像下面这样
void demo( int n, ... )
{
va_list argp; /* 定义保存函数参数的结构 */
int para; /* 存放取出的字符串参数 */
/* argp指向传入的第一个可选参数,
msg是最后一个确定的参数 */
va_start(argp,n);
while (n--)
{
para = va_arg(argp,char*);
printf("%s\n",para);
}
va_end( argp ); /* 将argp置为NULL */
}
int main()
{
demo(4,"1","111","3.0","4");
return 0;
}
代码像下面这样
void demo( int n, ... )
{
va_list argp; /* 定义保存函数参数的结构 */
int para; /* 存放取出的字符串参数 */
/* argp指向传入的第一个可选参数,
msg是最后一个确定的参数 */
va_start(argp,n);
while (n--)
{
para = va_arg(argp,char*);
printf("%s\n",para);
}
va_end( argp ); /* 将argp置为NULL */
}
int main()
{
demo(4,"1","111","3.0","4");
return 0;
}
#20
学习~~~
#21
c\c++交流群147325003
#22
++
楼主 error C2106: '=' : left operand must be l-value 这个错误明白不。
先看看最基本的书。 赋值怎么赋值, 谁应该放在=号左边谁应该放在=右右边