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];