#include <iostream>
#include<string>
#include <cstring>
#include<vector>
#include<sstream>
#include<algorithm>
#include <stdlib.h>
#include <stdio.h>
using namespace std;
int main()
{
char *p="fdg";
cout<<*(p+1)<<endl;;//p所指的位置是不变的与p++不同
cout<<*p<<endl;
cout<<p<<endl;
cout<<&p<<endl;//指针所在的地址
cout<<static_cast<const void *>(p)<<endl;//必须要转化成无类型指针,输出的是字符串首地址
string str=p;
cout<<str<<endl;
cout<<&str<<endl;
cout<<&str[0]<<endl;
cout<<static_cast<const void *>(&str[0])<<endl;
}
标红的两句不太懂,求解释
第一句红的为啥会输出字符串?
第二个。我明明是str这个指针指向相同的字符串取得f的地址为啥不一样。
还有想问问通过字符串变量是如何获得字符串的首地址的?
譬如 string s="fdvdf'';
想要通过s 获得fdvdf的首地址为啥cout<<static_cast<const void *>(s)<<endl;这样写就不行。。
字符串可以看作是字符数组
str是数组的首地址,
str[0]表示数组的首元素
&str[0]是suzuki首元素的地址,其值和str相同,故输出的是字符串
好像c++里面的string类型大小是固定的,它只是部分存了字符串的地址,其他的结构我也不太了解