char *a = "hello";a是字符指针,还是字符串指针
1、因为a定义为char类型,所以为字符指针,虽然a是一个字符串的首址,但实质还是指向一个字符2、因为a是一个字符串的首址,所以为字符串指针那么char*b='h';和s...
1、因为 a 定义为char类型,所以为字符指针,虽然a是一个字符串的首址,但实质还是指向一个字符
2、因为 a 是一个字符串的首址,所以为字符串指针
那么char *b= 'h';和string *str = "world";呢?
这个毫无疑问b是一个字符指针,str是一个字符串指针,并且str是指向一个字符串,是该字符串的首址,而首址对应的也是一个字符(似乎和a没什么区别)
上面是一些常见的见解,下面请大家就上面的a、b、str的实质意义进行回答
谢谢ycsxm指出char *b= 'h'; // 这是错误的,正确是 char b='h'; VC6.0中报错如下
error C2440: 'initializing' : cannot convert from 'const char' to 'char *'
同样地string *str = "world";也是错误的
现在修改如下
char tmp = 'h';
char *b = &tmp;
cout<<b<<endl;//输出:h后面还跟了一些乱码
cout<<*b<<end;//输出:h
char *a = "hello";
cout<<a<<endl;//输出:hello
cout<<*a<<endl;//输出:h
string str = "world";
string *pstr = &str;
cout<<pstr<<endl;//输出一个地址
cout<<*pstr<<endl;//输出:world 展开
2、因为 a 是一个字符串的首址,所以为字符串指针
那么char *b= 'h';和string *str = "world";呢?
这个毫无疑问b是一个字符指针,str是一个字符串指针,并且str是指向一个字符串,是该字符串的首址,而首址对应的也是一个字符(似乎和a没什么区别)
上面是一些常见的见解,下面请大家就上面的a、b、str的实质意义进行回答
谢谢ycsxm指出char *b= 'h'; // 这是错误的,正确是 char b='h'; VC6.0中报错如下
error C2440: 'initializing' : cannot convert from 'const char' to 'char *'
同样地string *str = "world";也是错误的
现在修改如下
char tmp = 'h';
char *b = &tmp;
cout<<b<<endl;//输出:h后面还跟了一些乱码
cout<<*b<<end;//输出:h
char *a = "hello";
cout<<a<<endl;//输出:hello
cout<<*a<<endl;//输出:h
string str = "world";
string *pstr = &str;
cout<<pstr<<endl;//输出一个地址
cout<<*pstr<<endl;//输出:world 展开
5个回答
展开全部
其实讨论这个的意义,首先要明白,指针的概念,指针是什么,其实就是一个地址,指针变量存储的永远是地址。
就拿楼主所说的例子来说:
1、char *a = "hello";
2、char tmp = 'h'; char *b = &tmp;
3、string *str = "world";
这3个例子中的 a,b,str,都只是一个指针而已,只是他们的指向不同。
在C语言里面,只有字符指针,没有字符串指针,那么为什么可以用一个字符指针指向一个字符串呢?原因是,一个字符串本身是一个字符数组,一个数组的数组名,就是这个数组的首地址,也就是存放这个数组的开始地址,归根结底这里还是一个地址,而指针变量存储的就是地址。而你会问,为啥要用一个字符指针去存储这个地址呢?那是因为这个字符数组的首地址所指向的值是一个字符,所以需要一个字符指针,其实int *a = (int *)"hello"; 也是合法。
所以 a 的意义是:在C语言中用一个字符指针表示一个字符串的开始,因为C语言中没有字符指针。
char tmp = 'h'; char *b = &tmp; 同上面的解释,tmp变量存储的是一个字符,就相当于再内存中,存放字符‘h’的地址指向的是一个字符,所以可以用 &tmp 取得地址,存储在指针b中,同理其实也可以用一个整型指针 int *b = (int *)&tmp;
针对 string *str = "world"; 这个就是C++中的字符串指针了,名副其实的字符串指针。就像整型指针,字符指针一样地位。
他们各自的意义在于用在不同的地方,实现不同的功能。
就拿楼主所说的例子来说:
1、char *a = "hello";
2、char tmp = 'h'; char *b = &tmp;
3、string *str = "world";
这3个例子中的 a,b,str,都只是一个指针而已,只是他们的指向不同。
在C语言里面,只有字符指针,没有字符串指针,那么为什么可以用一个字符指针指向一个字符串呢?原因是,一个字符串本身是一个字符数组,一个数组的数组名,就是这个数组的首地址,也就是存放这个数组的开始地址,归根结底这里还是一个地址,而指针变量存储的就是地址。而你会问,为啥要用一个字符指针去存储这个地址呢?那是因为这个字符数组的首地址所指向的值是一个字符,所以需要一个字符指针,其实int *a = (int *)"hello"; 也是合法。
所以 a 的意义是:在C语言中用一个字符指针表示一个字符串的开始,因为C语言中没有字符指针。
char tmp = 'h'; char *b = &tmp; 同上面的解释,tmp变量存储的是一个字符,就相当于再内存中,存放字符‘h’的地址指向的是一个字符,所以可以用 &tmp 取得地址,存储在指针b中,同理其实也可以用一个整型指针 int *b = (int *)&tmp;
针对 string *str = "world"; 这个就是C++中的字符串指针了,名副其实的字符串指针。就像整型指针,字符指针一样地位。
他们各自的意义在于用在不同的地方,实现不同的功能。
展开全部
首先回答楼主上面的问题
char* b = "hello",这里给b分配了6个char类型的内存。其中*b,也就是b所指向的内存里面的值是'h',而cout << b;可以表示这个字符串,意思就是从b的首地址开始读下去,得到字符串"hello"
string* str跟上面的是不一样的,这个可以赋值string* str = {"hello", "world"};也就是说每个元素都是string类型的,跟char*是不一样的,不过string*可以用char**来代替,但不能使用string类型特有的函数。
对于问题补充
char tmp = 'h';
char *b = &tmp;
首先要知道&tmp是什么,tmp是char类型的,因此&tmp就是char*类型的,上面已经说过char*可以理解为字符串。cout<<b<<endl;其实就是cout<<&tmp<<endl;,输出的是字符串。cout是直到遇到 '\0' 才不打印的,在内存里面,没被初始化的值是未知的,因此后面可能出现乱码,直到遇到 '\0' 停止打印
char* b = "hello",这里给b分配了6个char类型的内存。其中*b,也就是b所指向的内存里面的值是'h',而cout << b;可以表示这个字符串,意思就是从b的首地址开始读下去,得到字符串"hello"
string* str跟上面的是不一样的,这个可以赋值string* str = {"hello", "world"};也就是说每个元素都是string类型的,跟char*是不一样的,不过string*可以用char**来代替,但不能使用string类型特有的函数。
对于问题补充
char tmp = 'h';
char *b = &tmp;
首先要知道&tmp是什么,tmp是char类型的,因此&tmp就是char*类型的,上面已经说过char*可以理解为字符串。cout<<b<<endl;其实就是cout<<&tmp<<endl;,输出的是字符串。cout是直到遇到 '\0' 才不打印的,在内存里面,没被初始化的值是未知的,因此后面可能出现乱码,直到遇到 '\0' 停止打印
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1. a为 char *类型;a指向串与a指向字符一个意思;
2, char *b= 'h'; // 这是错误的,正确是 char b='h';
2, char *b= 'h'; // 这是错误的,正确是 char b='h';
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
所有指针大小都是4字节,不管什么类型,里面存的是地址,和地址里面的数据没有关系…指针里存的是那块内存首地址,不过讨论这个没有什么意义…
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
char是简单数据类型,string一般是使用类模板实现的c++类,完全不是一个层次上的东西,不要看起来像就以为一样了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询