我目前正在读一本关于C指针的书,书中有一个让我感到困惑的例子:
假设我们有:void Start()
{
StartCoroutine( GameLogic() ) ;
}
IEnumerator GameLogic () {
while (true )
{
if (chosen == false) {
if (choice != "")
chosen = true;
}
if (chosen == true){
enemyChoice = "";
int n = rnd.Next(num.Count);
enemyChoice = choices [n];
Debug.Log (choice); // Here choice should be printed, then the coroutine started and then enemy choice printed
Debug.Log ("Before Wait");
yield return new WaitForSeconds (2);
Debug.Log ("After Wait");
Debug.Log (enemyChoice);
chosen = false;
toDecide = true;
}
if (toDecide == true){ // sorry for the clunky way of deciding the result
if (choice == enemyChoice) {
Debug.Log ("Draw");
} else if (choice == "rock" && enemyChoice == "paper") {
Debug.Log ("Lose");
} else if (choice == "rock" && enemyChoice == "scissors") {
Debug.Log ("Win");
} else if (choice == "paper" && enemyChoice == "rock") {
Debug.Log ("Win");
} else if (choice == "paper" && enemyChoice == "scissors") {
Debug.Log ("Lose");
} else if (choice == "scissors" && enemyChoice == "paper") {
Debug.Log ("Win");
} else if (choice == "scissors" && enemyChoice == "rock") {
Debug.Log ("Lose");
} else {
Debug.Log ("Error");
}
toDecide = false;
choice = "";
enemyChoice = "";
}
yield return null ; // To wait one frame
}
}
我们设置:int arr_of_int[] = {5,10,15};
然后我知道" int *add_of_arr = arr_of_int;
"变量保存地址:add_of_arr
让我们假设" arr_of_int[0];
"的地址。是500.
现在,如果我这样做:" add_of_arr
"那么" add_of_arr"的地址现在是512?这是我从书中得到的,但不应该是" add_of_arr += 3;
"的地址。仍然是500,只有add_of_arr的地址HELD是512?我从书中得到的是add_of_arr的地址正在发生变化。这让我很困惑。我认为这是一个错误,但我不确定。
谢谢!
答案 0 :(得分:3)
这是一个错字:地址 in add_of_arr现在为512,但地址 add_of_addr没有改变。
答案 1 :(得分:0)
你有两件事:指针是一个变量来存储一个内存
地址。作为变量,它也有自己的地址,它驻留在内存中。如你所说,让这个为500。
表达式add_of_arr=arr_of_int
因此复制了地址
arr_of_int[0]
进入内存位置500.现在假设,arr_of_int
位于
内存位置400.然后add_of_arr=arr_of_int
将400存储到内存位置500. add_of_arr += 3
指针在内存位置500后包含412. add_of_arr
的地址(由&add_of_arr
)但仍然是500,但其值(由add_of_arr
获得)已从400更改为412.