我有一个代码,其中有效:
//code 1
int* p0 = &v0;
int* p1 = &v1;
.
.
.
int* pn = &vn;
但是以下内容没有:
//code 2
int *p0, *p1, ...,*pn;
*p0 = &v0;
*p1 = &v1;
.
.
.
*pn = &vn;
为什么不呢?重现代码1的结果的正确方法是什么?
我需要第二种类型,因为我想将这些*pi (i = 1 to n)
转换为数组*p[i]
,我想要这样的东西:
//code 3
int *p[n];
*p[0] = &v1;
*p[1] = &v2;
.
.
.
*p[n] = &vn;
出于某种原因,目前,我不想将" vi
" s转换为数组。
编辑:
根据我收到的答案进行编辑:
阵列方法似乎不起作用!对我有用的原始代码是:
int* p0 = &v0[0];
int *p1 = &v0[1];
...
int* q0 = &v1[0];
int *q1 = &v2[1];
...
在main
中我有
const bool cond1 = *p1 > 2;
const bool cond2 *p2 > 3;
...
等,它可以正常工作。因此,根据答案,我尝试了以下方法:
int* p[n], q[n],...;
int v[n][m];
,然后
p[0] = &v[0][0];
p[1] = &v[0][1];
....`
q[0] = &v[1][0];
q[1] =&v[2][0];
...
此代码不起作用。它返回所有这些布尔的条件作为跌倒,但并非总是应该如此!
复制第一个代码示例结果的正确方法是这样:
int *p0, *p1, ...,*pn;
p0 = &v0;
p1 = &v1;
.
.
.
pn = &vn;
或用于您的数组示例:
int *p[n];
p[0] = &v1;
p[1] = &v2;
.
.
.
p[n] = &vn;
定义中的星号将变量类型指定为指针。在其他情况下,它试图解释指针,并引起对int
的引用,您在没有铸件的情况下无法将地址分配给。
您还应该考虑合并数组定义及其初始化:
int *p[n] = {
&v1,
&v2,
.
.
.
&vn
};
您似乎使*
符号的两个不同的用法混淆了,在您所做的情况下,>不同的含义。
首先要修改变量的 type ,以使其成为指针类型,然后访问指针指向的值。
当您声明 一个变量 *
属于 type (无论您放置在哪里)。
so:
int* p0; // p0 is of type "int pointer"
由于 p0
是指针类型,您不需要做任何事情就可以指向地址:
p0 = &v0;
,只有要 dereference value value 的指针,才能做一些奇特的事情。
*p0 = 5; // dereference p0 to get to the int
这是*
的A 不同的用法。在使用 type 信息之前,但是现在它用于删除指针。因此,由于它正在取消一个变量,因此将语义应用于变量*p0
。
因此,当将变量声明为指针时,*
将语义应用于 type :
int* p0; // * is part of the type
访问(取消给出)获得其目标值的指针将*
应用于变量:
*p0 = 5;
但是语言语法允许将*
放置在 type 和 actible 之间的任何位置声明/em>:
int *p0; // also legal but * still semantically applies to the type