我正在為我正在學習的課程撰寫一些代碼,由于我不熟悉 C ,我對下標指標感到困惑。
我的假設:
&
作為變數名的前綴,為您提供指向該值的記憶體地址的指標,并且與*
作為變數名的前綴大致相反,后者反過來為您提供駐留在特定記憶體地址的值。
指標是可下標的,因此ptr[0] == ptr
and ptr[n] == ptr (n * data_bytes)
, wheredata_bytes
取決于指標的特定型別(例如,對于 32 位整數,4 位元組寬)。
問題:
當我想給記憶體地址下標的時候,我得先把它放在一個變數中,我不明白為什么我不能直接給變數下標。
最小代碼示例:
#include <iostream>
using namespace std;
int main() {
int val = 1;
int *val_ptr = &val;
cout << &val << endl;
// works
cout << val_ptr[0] << endl;
// does not work
// cout << &val[0] << endl;
return 0;
}
附錄
我知道一些相關的問題,但它們并沒有真正幫助我理解這個具體問題。
我在看:
- C 中的指標變數和參考變數有什么區別?
- &符號(&)符號如何在c 中作業?
- 指標上的下標運算子
- 使用指標下標整數變數
雖然這幾乎可以肯定是重復的(我幾乎不會是第一個被指標混淆的人),或者甚至可能有一個我在鏈接問題中忽略的答案,但我會很感激任何幫助!
uj5u.com熱心網友回復:
根據 Ted Klein Bergmann 的評論,運算子優先級存在問題。
[]
之前考慮過&
。(&val)[0]
改為這樣做。
所以一個作業的例子是
#include <iostream>
using namespace std;
int main() {
int val = 1;
// does work now
cout << (&val)[0] << endl;
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/470457.html