為了理解指標,我撰寫了以下代碼。
#include <cstdio>
#include <iostream>
using namespace std;
int main() {
string a = "hello";
const char *st = &a[0];
printf("%p\n", &st[0]);
printf("%p\n", &(a[0]));
printf("%c\n", *st);
printf("%p", &a);
}
這是我得到的輸出
0x1265028
0x1265028
h
0x7ffe26a91c40
如果我的理解是正確&a的應該回傳字串的地址,為什么回傳的值&a與其余的不同?
uj5u.com熱心網友回復:
Astd::string是一個 C 物件,它內部包含一個指向 s 陣列的指標char。
在您的代碼中,st是指向該內部陣列中第一個字符的&a指標,而是指向 C 物件的指標。它們是不同的東西,因此指標值也不同。
uj5u.com熱心網友回復:
&aa是型別變數的地址std::string。由于std::string包含可變長度的字符陣列,它必須使用動態分配并將實際陣列存盤在其他地方。
但是,std::string有許多運算子多載。a[0]回傳對a's 陣列中第一個字符的參考,并且&a[0]是該字符的地址。這就是為什么&st[0]和&a[0]將是相同的地址,st也指向a's 陣列中的第一個字符。
uj5u.com熱心網友回復:
0x1265028 - 第一個字符的
地址 0x1265028 - 第一個字符的地址
h - 第一個字符值
0x7ffe26a91c40 - std::string 物件的地址
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/506495.html
上一篇:為什么這個程式有效?
