[英]initializing char and char pointers
这些之间有什么区别:
这个工作:
char* pEmpty = new char;
*pEmpty = 'x';
但是,如果我尝试做:
char* pEmpty = NULL;
*pEmpty = 'x'; // <---- doesn't work!
和:
char* pEmpty = "x"; // putting in double quotes works! why??
编辑:谢谢你的所有意见:我纠正了它。 它应该是pEmpty ='x',所以,这行甚至不编译:char pEmpty ='x'; 这行有效:char * pEmpty =“x”; //双引号。
你的第二行不起作用,因为你试图将'x'
分配给pEmpty
而不是*pEmpty
。
编辑 :感谢Chuck的纠正。 它也不起作用,因为你需要分配一些内存来保存值'x'
。 请参阅下面的示例。
第三行确实有效,因为您使用的是initalizer而不是常规赋值语句。
通常,您应该了解指针和解除引用的工作原理。
char *p = new char(); // Now I have a variable named p that contains
// the memory address of a single piece of character
// data.
*p = 'x'; // Here I assign the letter 'x' to the dereferenced value of p;
// that is, I look up the location of the memory address contained
// in p and put 'x' there.
p = 'x'; // This is illegal because p contains a memory address,
// not a character.
char q = 'x'; // Now I have a char variable named q containing the
// character 'x'.
p = &q; // Now I assign the address of q (obtained with the reference
// operator &) to p. This is legal because p contains a memory
// address.
你需要记住指针是什么 - 它只是一个保存地址的普通变量,就像char
保存一个字符值一样。 此地址可用于查找另一个变量(使用*
运算符)。
当你执行char* pEmpty = new char
,你给pEmpty
new char
返回的值,这是一块大到足以保存char值的内存块的地址 。 然后使用*pEmpty
访问此内存并为其赋值*pEmpty
'x'
。
在第二个例子中,你写了pEmpty = 'x'
- 但是请记住pEmpty
是一个指针 ,这意味着它应该保存一个地址 。 'x'
是地址吗? 不,这是一个字符文字! 所以这条线并没有真正意义。
在第三个示例中,您将pEmpty
指定为字符串文字"x"
。 这是一个地址吗? 是的。 该文字计算该常量字符串的地址。
请记住,指针与它们指向的类型完全不同。 它们可用于访问该类型的值,但它们是完全不同的类型。
不同之处在于字符串文字存储在程序可以在运行时访问的内存位置,而字符文字只是值。 C ++的设计使得字符文字(例如示例中的字符文字)可以作为机器代码的一部分内联,并且根本不存储在内存位置。
要执行您似乎要执行的操作,您必须定义一个char
类型的静态变量,该变量初始化为'x'
,然后设置pEmpty
以引用该变量。
第二个例子由于几个原因不起作用。 第一个是你指针指向,特别是没有指针。 第二个是你实际上没有取消引用它,所以你告诉指针指向一个字符文字的地址。 由于它没有地址,编译器会抱怨。
编辑:
为了清楚起见,星号(*)是取消引用指针的运算符。
pEmpty = 'x';
为pEmpty
(而不是它指向的内存)分配'x'的值。
*pEmpty = 'x'; //this is probably what you want
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.