为什么它不会在第2行引发错误?
char *p = "Hello";
p = "Bye";
*p
是变量,因此p
是变量*p
的地址。
请有人解释一下上面的代码是什么情况?
答案 0 :(得分:4)
*p
不是“变量”。 p
是变量,它是一个指针。 C和C ++具有奇怪的声明语法,您可以使用与访问变量相同的语法声明变量。
char *p;
在该声明中,我们声明p
,而不是*p
,但声明p
是p
成为*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