C 警告:不兼容的整数到指针转换初始化';int*';使用类型为';int';;将地址与&;

C 警告:不兼容的整数到指针转换初始化';int*';使用类型为';int';;将地址与&;,c,debugging,C,Debugging,我有这段代码,我现在正试图调试它,我得到了以下错误: warning: incompatible integer to pointer conversion initializing 'int *' with an expression of type 'int'; take the address with & [-Wint-conversion] int * b = a[1]; 我正在调试的代码如下: #include<stdio.h>

我有这段代码,我现在正试图调试它,我得到了以下错误:

warning: incompatible integer to pointer conversion initializing
      'int *' with an expression of type 'int'; take the address with &
      [-Wint-conversion]
    int * b = a[1];
我正在调试的代码如下:

#include<stdio.h>
  
int main() {
    int ii;
    int a[] = {1,2,3,4,5,6};
    int * b = a[1];

    for (ii=0;ii<6;ii++) {
        printf("%d ",*(b+ii));
    }
    printf("\n");
    return 0;
}
#包括
int main(){
int ii;
int a[]={1,2,3,4,5,6};
int*b=a[1];
对于(ii=0;ii
b是指针,a[1]是整数

尝试:

这将带我们进入有趣的部分。你没有记忆

其他方式:

int *b=(a+1);
还有一个:

int *b=&a[1];

这段代码首先应该做什么?
int*b
是一个指针。
a[1]
是一个
int
。为什么要尝试将
int
分配给指针?数组索引从0开始。并且,您需要
a
的地址。因此,将
int*b=a[1];
更改为
int*b=&a[0];
,您可以使用取消引用的“数组形式”[它更干净],因此:
*(b+ii)
-->
b[ii]
错误消息告诉您如何修复它,您可以清楚地看到(在第行
printf(“%d”,“*(b+ii));
)他将使用
b
作为指针。因此,
*b=a[1]
不能用于此目的。最好使用
b=a
b=&a[0]
。这就是我编写其他选项的原因。我不必假设变量的用途。您不需要假设。这不是一个假设。很明显,他/她将使用
b
作为
printf
行上的指针。此外,如果不创建v,您无法创建指针并为其赋值验证它所指向的内存地址。一条普通线
int*b;
将创建一个指针,但它不指向任何内存空间;因此,您不能使用反引用运算符分配值(
*b=A[1]
甚至
*b=2
肯定无法编译).你最好修改一下“指针”一章。如果你读了我的答案,你会发现“这会把我们带到有趣的部分。你对它没有记忆!“我认为它考虑了所有的可能性。由于OP没有要求任何东西,我只是公开了所有可能的变化。我不需要修改指针,我不知道为什么会对我采取这种态度。请不要把这当成个人问题。否决票只针对印刷文本,不针对你或其他任何人。最后一行代码(
int*b=&a[1];
)与您提供的其他行中的正确答案最接近,如果打印为
int*b=&a[0];
int *b=(a+1);
int *b=&a[1];