可能重复:
C++中指针变量和引用变量之间的差异
当我开始使用C++时,我发现下面的操作令人困惑.我知道通过引用传递和传递值.但是最近我遇到了这样的功能让我很困惑:
Func1(int &a)
Func2(int *a)
Run Code Online (Sandbox Code Playgroud)
这两个函数都期望a的地址,但是当我调用Func1时,我会这样做,Func1(a)而在Func2的情况下,我调用了Func2(&a)
为什么Func1在期望a的地址时直接接受int a
我试图弄清楚如何在Python中查询JSON数组.有人可以告诉我如何通过一个相当复杂的数组进行简单的搜索和打印吗?
我正在使用的例子是:http://eu.battle.net/api/wow/realm/status
我想看看,例如,如何找到'Silvermoon'服务器,打印说'人口',然后是'Wintergrasp'阵列中的'控制派'.
该数组代码段目前如下所示:
{"type":"pve","population":"high","queue":false,"wintergrasp":{"area":1,"controlling-faction":0,"status":0,"next":1382350068792},"tol-barad":{"area":21,"controlling-faction":0,"status":0,"next":1382349141932},"status":true,"name":"Silvermoon","slug":"silvermoon","battlegroup":"Cyclone / Wirbelsturm","locale":"en_GB","timezone":"Europe/Paris"}
Run Code Online (Sandbox Code Playgroud)
目前我可以访问主数组,但似乎无法访问子数组而不将整个事件复制到另一个看起来很浪费的新变量.我希望能够做类似的事情
import urllib2
import json
req = urllib2.Request("http://eu.battle.net/api/wow/realm/status", None, {})
opener = urllib2.build_opener()
f = opener.open(req)
x = json.load(f) # open the file and read into a variable
# search and find the Silvermoon server
silvermoon_array = ????
# print the population
print silvermoon_array.????
# access the Wintergrasp sub-array
wintergrasp_sub = ????
print wintergrasp_sub.???? # print the controlling-faction variable
Run Code Online (Sandbox Code Playgroud)
这真的可以帮助我掌握如何访问其他东西.
如何try()修改函数(以及它的调用)以从下面的程序中获得11的输出?
#include <stdio.h>
/* declare try() here */
int main(void)
{
int x = 10;
try(); /* Call can change */
printf("%d\n", x);
return 0;
}
void try() /* Signature can change */
{
/* how to change x here?? */
}
Run Code Online (Sandbox Code Playgroud) 将变量传递给函数时,为什么函数只获取变量的副本/副本?
int n=1;
void foo(int i)
{
i++;
}
Run Code Online (Sandbox Code Playgroud)
众所周知,函数foo()不能通过n使用foo(n)来改变它的值.
当然我们可以传递变量的地址来对参数变量进行一些更改.
但是你不觉得这有点不方便吗?
为什么c/c ++只是为了给函数提供重复而不是直接将"真实"变量本身赋给函数?
这种范式的优点/好处是什么?
更新:
我已经阅读了@ paxdiablo的回答.我认为他的"封装,模块化和效果本地化"的解释是好的.
但在我的方式,它也可以保留参数参数的值.它还可以实现封装.通过这种方式:(假设函数可以直接获取"真实"变量而不是默认的重复)
void foo(int n)
{
int temp=n;
//Do something to temp...
}
Run Code Online (Sandbox Code Playgroud)
在我的方式中,当你想要改变传入的参数值时,可以消除复杂的机制,例如"通过引用传递"或指针.这就是好处.
经过一段时间的思考.我意识到为什么c/c ++没有像我提出的那样设计的原因只是因为我的方式的不合理!
按照我的方式,如果一个函数有很长的变量列表,那就太可怕了.我想要的是更方便的方式实际上不方便:
你必须这样写:
void foo(int a,int b,double c,float d,char s...)
{
int temp1=a;
int temp2=b;
double temp3=c;
float temp4=d;
char temp5=s;
...
//Do something to temp{1,2,3,4,5....}
}
Run Code Online (Sandbox Code Playgroud)
因此,c/c ++的设计者引入了复杂的机制来方便地进行权衡.
我对吗?
将动态大小的数组传递给另一个函数的最"正确"的方法是什么?
bool *used = new bool[length]();
Run Code Online (Sandbox Code Playgroud)
我想出了一些编译的方法,但我不太确定正确的方法是什么.
例如
这些会超过价值吗?
static void test(bool arr[])
static void test(bool *arr)
Run Code Online (Sandbox Code Playgroud)
这个会通过引用传递吗?
static void test(bool *&arr)
Run Code Online (Sandbox Code Playgroud)
谢谢
我是 php/programming 的新手,想知道为什么这不能按我认为的方式工作。
我有一个数组,我想用函数修改它的值之一。
我一直在阅读并遵循一些教程,并认为这与变量范围有关?或者也许这不是解决此类问题的方法,应该使用其他方法?
<?php
$someArray = array("value1"=> 0, "value2" => 0);
function test ($a) {
if ( 5 > 4 ) {
$a["value1"] += 1;
echo $a["value1"] . "<br/>";
}
}
test($someArray);
echo $someArray["value1"];
?>
Run Code Online (Sandbox Code Playgroud)
我不明白的是为什么当我在函数内部回显以获取“value1”的新值时它起作用,但在外部它不起作用。我真的很感激任何帮助/指导,如果这太愚蠢或错误,我很抱歉。
我已经阅读了这里的问题和答案:
但是对我来说为什么数字(原始类型)是不可变的还不够清楚?仅仅因为他们创建了一个新的引用但没有覆盖该值?
如果在每个assignemt上创建一个新的引用
var x = 5;
x = 1;
Run Code Online (Sandbox Code Playgroud)
在下面的循环中我们会有 100 次新引用吗?
while (x < 101)
{
x++;
}
Run Code Online (Sandbox Code Playgroud)
这样有效率吗?我想我没有正确看待。
public class TestClass
{
public int TestNumber;
public string TestName;
public TestClass(string name, int number)
{
TestName = name;
TestNumber = number;
}
}
public class AnotherClass
{
TestClass Var1, Var2;
void Start()
{
Var1 = new TestClass("Me", 1);
Var2 = Var1;
Var2.TestName = "aaa";
}
}
Run Code Online (Sandbox Code Playgroud)
当我调试Var1.TestName我得到的值时,"aaa"但最初它是"Me". 如何将每个 var 分开但仍然Var2从 中获取其初始值Var1?
如果您在Stackoverflow上搜索如何在JS中缓存变量,您将找到指向cookie或本地存储的答案.
另一方面,"缓存"这个词通常用作:"缓存数组的长度,这样我们就不必每次都计算它".
当然,我们不会在cookie或本地存储中缓存长度.我的问题是:
"缓存"长度的位置在哪里?它在记忆中吗?如果是这样,为什么我们使用"缓存"这个词?