int *ptr = &var 和 int *ptr 之间的区别;*PTR = 和变量?



我有一个代码,其中有效:

//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

最新更新