|
|
发表于 2006-1-26 16:19:00
|
显示全部楼层
Re:[疑问!] char* szStr = "Cheng Xu Yuan" ; 中,szStr是内
我的理解是:
char *str ;// 这个是一个char 指针。这是一种基本的理解,但是c语言里面还有一种理解,就是根据他的用途来扩展的一个意义。叫字符串。 字符串和char指针的不同在于,字符串是一个人为的使用规范,它规定了str 所指向的地址为开始地址, 直到遇到值为 '\0'的地址结束,这段地址都是合法的。
但是这个人为的规范很简陋,因为它不能区分到底char *str是遵照这个规范的字符串,还是他的基本语意,char指针。这往往容易出现问题。
str = "hello"; //这个赋值操作,并非是将 'h' 赋值给str.
char s = 'h'; char *ps = &s; -->可见 char *ps = 'h'; 是错误的,而ps = &'h';才是正确的类型赋值。
因而, str = "hello";这里的"hello"的值不是hello的字符编码,而是他的地址值。这和字符文本是不同的。
对于cout 的显示问题,楼主有点混乱。
cout是一个函数,它可以对他的输入参数做任何可能的操作,一个指针,他有必要一定要取他的值吗?那样有什么意义,他不能去指针指向的数据吗?就好像:
int i = 100;
int *pi = &i;
打印 pi ; //指针的值往往没有意义。
打印 *pi; //取指针指向的数据,这可是指针的基本操作啊。
要打印一个字符串:
for (int i =0; *str != '\0"; str++) //str++指向下一个字符的地址
{
char c = *str;
printf( "%c", c);
}
只需按照他的规范,也就是以'\0'为结尾的连续地址空间。
不过cout是如何判断它是一个字符串,而不是一个字符指针,还真不清楚。
|
|