由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 问个a=b 的问题
相关主题
刚看完类这一章,有些大小问题,请指教,谢谢c++如果调用没参数的函数不用加()就好了
will static/global var be initialized to 0 in C/C++请教一个C++概念。
C++一问static 变量放在哪里?C++
问个c语言的问题C++ 全局变量是怎么回事?
为啥允许这样的const设计问个C++编译器如何处理函数内的static 变量
[求教大虾]关于C++编译期变量和运行期变量的区别,总是有疑惑c++ 不自动initialize变量么?
C++编程原则的问题c++ 弱问题:static const char* const 这两个const 分别是什么意思?
C++编程问题:union inside struct我是否需要Move(C++11)?
相关话题的讨论汇总
话题: 地址话题: int话题: 变量话题: static话题: showme
进入Programming版参与讨论
1 (共1页)
G***G
发帖数: 16778
1
int a = 1; //a有一个地址了。里面的内容是1
int b = a; //请问,b和a共用一个地址吗?还是b是另外一个地址,但是地址里的内
容是1
a = 2; //a的内容变成2了。请问a的地址改变了吗?此时b是等于1还是等于2?
showme(a);
public void showme(int c)
{
int d = c; //请问这个c和a是共用同一个地址吗?还是不同地址? d和c共用一
个地址吗?
}
-----------------下面更复杂一些
int a = new int();
a=1; //这个时候a的地址是改变了吗?
static int b = new int()
b = 1; //这个时候b的地址是没有改变,对吗?
a*****e
发帖数: 1700
2
你应该把声明和赋值分开,才好理解。比如:
int a;
int b;
以上声明,a 和 b 各有一个 stack 上的地址。
a = 1;
b = a;
赋值的时候,要把 lvalue 和 rvalue 区分开,才好理解。比如上面两句可以改写为以
下形式:
write(&a, 1);
write(&b, a);
&a 表示取了变量 a 的地址,a 表示变量 a 所存储的值。write(X, Y) 表示向地址 X
写入值 Y。

【在 G***G 的大作中提到】
: int a = 1; //a有一个地址了。里面的内容是1
: int b = a; //请问,b和a共用一个地址吗?还是b是另外一个地址,但是地址里的内
: 容是1
: a = 2; //a的内容变成2了。请问a的地址改变了吗?此时b是等于1还是等于2?
: showme(a);
: public void showme(int c)
: {
: int d = c; //请问这个c和a是共用同一个地址吗?还是不同地址? d和c共用一
: 个地址吗?
: }

n*****j
发帖数: 18
3
大牛一般都讨论高大上的东西和big picture,你这问题too simple sometimes naive,
怪不得没人鸟你
G***G
发帖数: 16778
4
我以前也是这样理解的。
但是
static int a;
a=1;
int b;
b = 1;
虽然a和b都是value type;虽然它们都赋值1;但是一个是静态地址,一个动态地址。
对于它们
a=1
和b=1
有很大的不同。

【在 a*****e 的大作中提到】
: 你应该把声明和赋值分开,才好理解。比如:
: int a;
: int b;
: 以上声明,a 和 b 各有一个 stack 上的地址。
: a = 1;
: b = a;
: 赋值的时候,要把 lvalue 和 rvalue 区分开,才好理解。比如上面两句可以改写为以
: 下形式:
: write(&a, 1);
: write(&b, a);

a*****e
发帖数: 1700
5
你这是 java 还是 C 还是 C++?
没什么不同,不管是不是 static,都是内存里面的地址,有堆和栈的区别,也有 per
object 和 per class 的区别,但不影响你理解赋值的 lvalue 和 rvalue。
static 与否,唯一影响的是 scoping。就是说用到一个变量的时候,是指的哪个地方
声明的这个变量。
理解编程语言,理解它的语义是一方面,理解它的实现是另一方面。两者可以相互促进
理解,但是能区分开最好。

【在 G***G 的大作中提到】
: 我以前也是这样理解的。
: 但是
: static int a;
: a=1;
: int b;
: b = 1;
: 虽然a和b都是value type;虽然它们都赋值1;但是一个是静态地址,一个动态地址。
: 对于它们
: a=1
: 和b=1

z****e
发帖数: 54598
6
java里面a=1存的不是地址
就是primitive type
就是1
b=a的话,是value copy
存的是1
因为存的不是reference
都是value,所以不存在地址的问题
z****e
发帖数: 54598
7
static是在方法区内
java的static单独一个区
这个区跟stack&heap有交集
你可以认为是static的stack和static的heap
另外,again,不是地址
是primitive type,就是1
你反复说的地址是错误的
地址是Integer i=new Integer(1)
这时候i存的是地址,比如0x28ff21之类的
reference和value要区分
很多语言都有这个概念,比如swift
如果这个搞混了,你就麻烦了
f*******n
发帖数: 12623
8
每个变量有地址。无论primitive type还是reference type,两个变量a和b有不同的地
址。无论什么type,b=a都同样把a存的copy到b。

【在 z****e 的大作中提到】
: java里面a=1存的不是地址
: 就是primitive type
: 就是1
: b=a的话,是value copy
: 存的是1
: 因为存的不是reference
: 都是value,所以不存在地址的问题

z****e
发帖数: 54598
9
java里面不这么说
你这样的话,要讨论stack的地址
那就烦了

【在 f*******n 的大作中提到】
: 每个变量有地址。无论primitive type还是reference type,两个变量a和b有不同的地
: 址。无论什么type,b=a都同样把a存的copy到b。

S*A
发帖数: 7142
10
C 里面变量不一定有地址,变量可以优化掉直接放到寄存器里面。
h**********c
发帖数: 4120
11
这个说变量和常量比较好解释吧,常量一般要加final,c里面是什么忘了。常量不加
final什么的,是很严重的security hole,一般讲c的书都这么讲。二般的公司,差不
多就行了。
von neuman architecture,程序空间和变量空间分离。这样program才reloadbale,
才有code reuse, 面向对象etc.
int a=8
8 is hard-coded value in program space.
如有错误望赐教

【在 G***G 的大作中提到】
: int a = 1; //a有一个地址了。里面的内容是1
: int b = a; //请问,b和a共用一个地址吗?还是b是另外一个地址,但是地址里的内
: 容是1
: a = 2; //a的内容变成2了。请问a的地址改变了吗?此时b是等于1还是等于2?
: showme(a);
: public void showme(int c)
: {
: int d = c; //请问这个c和a是共用同一个地址吗?还是不同地址? d和c共用一
: 个地址吗?
: }

h**********c
发帖数: 4120
12
回到您的问题上,汇编,讲cpu的书有图例我记得,怎么load变量常量和hard code
value
f*******n
发帖数: 12623
13
反正我的意思是java和C在这个讨论上没有区别。

【在 z****e 的大作中提到】
: java里面不这么说
: 你这样的话,要讨论stack的地址
: 那就烦了

1 (共1页)
进入Programming版参与讨论
相关主题
我是否需要Move(C++11)?为啥允许这样的const设计
问个 C/C++ 的 -=, += 的问题[求教大虾]关于C++编译期变量和运行期变量的区别,总是有疑惑
问个字符串的基本问题C++编程原则的问题
问个无厘头问题C++编程问题:union inside struct
刚看完类这一章,有些大小问题,请指教,谢谢c++如果调用没参数的函数不用加()就好了
will static/global var be initialized to 0 in C/C++请教一个C++概念。
C++一问static 变量放在哪里?C++
问个c语言的问题C++ 全局变量是怎么回事?
相关话题的讨论汇总
话题: 地址话题: int话题: 变量话题: static话题: showme