为什么指针指向字符串输出指针就是输出了字符串呢
因为字符串本身就是靠指针描述的,字符串由于长度不固定,不可能像int那样分配固定内存给它,因此只能靠指针描述字符串。字符串是大端序存储,因此那个指针所描述的字符串就是从指针指向的地址开始一直往高地址增长遇到\0结束。
#include<iostream>
#include<string>
using namespace std;
int main()
{
char * temp="abc123";
string temp1="ABC123";
cout<<"temp:"<<temp<<endl;
cout<<"*temp:"<<*temp<<endl;
cout<<"&temp:"<<&temp<<endl;
cout<<"-------------"<<endl;
cout<<"temp1:"<<temp1<<endl;
cout<<"&temp1:"<<&temp1<<endl;
return 0;
}
得出结论 1指向字符的指针可以赋值,但是已经出现警告,不要将字符串常量初始化给字符指针。 2指向字符的指针 的指针temp本身代表字符串空间到”\0“结束; 3指向字符的指针 的指针*temp内容代表字符串空间的第一个元素; 4指向字符的指针的指针&temp地址代表,内存地址
5指向字符的指针等于一个字符类型的数组名称: char * temp ===char temp[100]==string temp; 两个变量是一样的有以下程序证明: string 也可以应用括号索引【】表示某一位的字符。改进的char*=string=char [] C++定义中字符串代表数组:
#include<iostream>
#include<string>
using namespace std;
int main()
{
char temp[10]="abc123";
char * temp1="ABC123";
cout<<"temp1:"<<temp1<<endl;
cout<<"temp1[0]:"<<temp1[0]<<endl;
cout<<"*temp1:"<<*temp1<<endl;
cout<<"&temp1:"<<&temp1<<endl;
cout<<"-------------"<<endl;
cout<<"temp:"<<temp<<endl;
cout<<"temp[0]:"<<temp[0]<<endl;
cout<<"*temp:"<<*temp<<endl;
cout<<"&temp:"<<&temp<<endl;
return 0;
}
字符串指针,与字符串数组:通用的功能,使用取地址符号表示第一个元素的地址,本身代表空间,可以只用指针表示变量名空间的第一个元素,并且都可以用括号【】表示索引位置。 那么看来两者唯一的区别就是数组可以直接定义区间大小(范围内的都为|0),而指针没有定义区间范围.单纯代表一段空间到\0的内容。
最好用string:来处理字符串 用【】:来处理有范围字符串 不要乱用char*.
return 在循环中:有break的作用和返回值两个作用.
|