在下面的代码中,我无法单独更改x和y的值。有人可以帮我分别分配这些值吗?
DECLARE @tblRangeIP TABLE(Digit1 INT,Digit2 INT,Digit3 INT,Digit4 INT)
SELECT * FROM dbo.f_Eng_Str_SplitOneDim('66.249.64.236','.')
select Digit1, Digit2, Digit3, Digit4
from
(
SELECT Value FROM dbo.f_Eng_Str_SplitOneDim('66.249.64.236','.')
) d
pivot
(
max(value)
for d.Value in ( Digit1, Digit2, Digit3, Digit4 )
) piv;
注意:我搜索过这样一个例子,我无法找到,而且我的时间已经不多了。如果问题已经提出,我真的很抱歉浪费你的时间,请为我提供链接以供参考。
答案 0 :(得分:3)
有两个重要问题需要考虑:
const struct p*
是"指向const p
"的指针,这意味着您无法修改它指向的实例。它可以指向非const
对象,但您无法使用指针修改所述对象。
指针必须指向有效对象才能取消引用。
您需要创建一个有效的p
实例,然后使指针指向它:
struct p x = {p2, p3};
const struct p *ptr1 = &x;
在此示例中,在自动存储中创建p
实例。如果更适合您的需要,您还可以使用malloc
动态实例化一个。例如,
struct p *px = malloc(sizeof (struct p));
px->x = p2;
px->y = p3;
const struct p *ptr1 = px;
在这两个示例中,您可以分别通过ptr1
和x
修改实例px
,但不能通过ptr1
修改。
答案 1 :(得分:3)
const struct p *ptr1 = {&p2,&p3}; // --- giving the expected result
它编译,但有这个警告;无论如何,它可能不会做你想要的事情:
警告:不兼容的指针类型使用'int *'类型的表达式初始化'const struct p *'[-Wincompatible-pointer-types]
要创建一个指向struct的常量指针,可以使用:
const struct p *ptr1 = &(struct p){p2, p3};
关于lifetime的快速说明:
如果复合文字出现在函数体外,则该对象具有静态存储持续时间;否则,它具有与封闭块相关的自动存储持续时间。
答案 2 :(得分:3)
由于作者似乎想要更改她声明const的结构,这实际上可能是一个非常相关的答案。
与这个问题直接相关的常见问题是
const struct p *ptr1
是指向“const struct p”的指针,这意味着指针变量ptr1可以更改并稍后指向不同的struct p,但无论它指向何处,都无法使用该指针写入结构的成员指针(例如ptr1->x = blah;
)。
有些人可能正在寻找的是一个指针,它是const,因此在初始化后被指定为一个内存时,它不能指向不同的内存。
那将是
struct p * const ptr2 = ptr1 // whatever ptr1 currently points to, ptr2 will point to there, from now to forever (for the lifetime / scope of ptr2).