基本C ++字符串指针

时间:2016-01-17 13:34:31

标签: c++ c pointers

为什么它不会在第2行引发错误?

char *p = "Hello";
p = "Bye";

*p是变量,因此p是变量*p的地址。 请有人解释一下上面的代码是什么情况?

4 个答案:

答案 0 :(得分:4)

*p不是“变量”。 p是变量,它是一个指针。 C和C ++具有奇怪的声明语法,您可以使用与访问变量相同的语法声明变量。

char *p;

在该声明中,我们声明p,而不是*p,但声明pp成为*p所需的事情char char *p = "Hello";

=

现在它可能是另一个不太直观的步骤,因为p右侧的内容是*p的初始值而不是char *p = "Hello"; p = "Bye"; 的初始值。这就是C和C ++的工作方式,并且很容易习惯和理解,即使左侧和右侧的含义最初看似违反直觉。

所以你的例子:

p

我可以看到为什么不知道C或C ++的人可能认为在第一行和第二行使用p时存在不同的间接层次。但实际上在n=4; % or probably better n=numel(x) Q=cell(n,1); for i=1:1:4; T=[(cos(x(i)))^2 (sin(x(i)))^2 2*(cos(x(i)))*(sin(x(i)));(sin(x(i)))^2 (cos(x(i)))^2 -2*(cos(x(i)))*(sin(x(i))) ;-(cos(x(i)))*(sin(x(i))) (cos(x(i)))*(sin(x(i))) (cos(x(i)))^2-(sin(x(i)))^2 ;]; Q{i}=inv(T)*Qq*R*T*inv(R); end 两行上都是一个指针,文本文字的地址存储在该指针中。

答案 1 :(得分:2)

那些不是 C ++ String Pointers ,那些是C-Strings。它不会抛出错误,因为string-literal本身就是指向第一个元素的指针。 p是指针,*p是你的第一个元素 String

答案 2 :(得分:0)

这是一个例子

(contact password = '' ifTrue:[^false])

你遇到的问题是p是带指针的变量。

答案 3 :(得分:-2)

在第一种情况下,为p分配字符串的地址。在第二种情况下,p被重新分配另一个字符串的地址 编辑 - 字符串文字未在堆栈中分配。感谢Q