C中的内存与指针算法有关

时间:2017-05-29 16:11:30

标签: c pointers math heap-memory

我目前正在读一本关于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的地址正在发生变化。这让我很困惑。我认为这是一个错误,但我不确定。

谢谢!

2 个答案:

答案 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.