C++ C语言中正确的指针算法
我正在尝试学习C语言中的指针操作,但我不理解部分代码是如何工作的C++ C语言中正确的指针算法,c++,c,pointers,pointer-arithmetic,C++,C,Pointers,Pointer Arithmetic,我正在尝试学习C语言中的指针操作,但我不理解部分代码是如何工作的 #include <stdio.h> int main() { int *alpha[17]; *(alpha+4)= 35; *(alpha+5)= 35; *(alpha+12)= 50; printf("%d", *(alpha+4)); *(alpha+8)=*(alpha+5) + *(alpha+12); return 0; } 为什么printf后面的行不工作,导致崩
#include <stdio.h>
int main() {
int *alpha[17];
*(alpha+4)= 35;
*(alpha+5)= 35;
*(alpha+12)= 50;
printf("%d", *(alpha+4));
*(alpha+8)=*(alpha+5) + *(alpha+12);
return 0;
}
为什么printf后面的行不工作,导致崩溃,而前面的行运行得很好?我试图让第9个值等于第6个值和第13个值的和 您已创建指针数组,但尚未创建int数组。 你应使用:
int alpha[17];
您已经创建了一个指针数组,但尚未创建INT数组。 你应使用:
int alpha[17];
int*α[17];创建指针数组
如果需要int数组,请使用int alpha[17]
由于从int到指针的隐式转换,您的赋值是成功的。我希望你得到警告
添加两个指针不仅没有意义,而且在C中也是不允许的。
说明为什么C++中禁止添加两个指针,但也适用于C。< P> int *Alpha(17);创建指针数组
如果需要int数组,请使用int alpha[17]
由于从int到指针的隐式转换,您的赋值是成功的。我希望你得到警告
添加两个指针不仅没有意义,而且在C中也是不允许的。
说明为什么在C++中添加两个指针是不允许的,但论证也适用于C。错误:正在添加指针的二进制表达式“int*”和“int*”的操作数无效。您不应该添加指针。代码中有几个不同的未定义行为实例。当printf转换说明符与参数类型不匹配时:%d当参数类型为int*时。以及将int赋值给int*。不要忽略编译器错误/warnings@CornstalksOP不是在添加指针,而是在添加未引用的值。它不适合我编译。错误:正在添加指针的二进制表达式“int*”和“int*”的操作数无效。您不应该添加指针。代码中有几个不同的未定义行为实例。当printf转换说明符与参数类型不匹配时:%d当参数类型为int*时。以及将int赋值给int*。不要忽略编译器错误/warnings@CornstalksOP不是在添加指针,而是在添加未引用的值。不过,请注意,他并不是在向指针写入数据。他只是在给数组写信-1表示第一句话有误导性。请尝试int-alpha[17]={0}@玉米秸秆他实际上是在给一个间接数组写东西。。。指向未分配数组的数组的指针。他在给DEADBEEF写信。@stobbe先生:不,他不是。例如,*alpha+4=nullptr;在他的代码中是完全正确的。正如我所说的,他是在向数组而不是指针写数据。@Cornstalks注意到*in int*alpha[17];不过,请注意,他并不是按照指示写的。他只是在给数组写信-1表示第一句话有误导性。请尝试int-alpha[17]={0}@玉米秸秆他实际上是在给一个间接数组写东西。。。指向未分配数组的数组的指针。他在给DEADBEEF写信。@stobbe先生:不,他不是。例如,*alpha+4=nullptr;在他的代码中是完全正确的。正如我所说的,他是在向数组而不是指针写数据。@Cornstalks注意到*in int*alpha[17];谢谢,我误解了声明int类型17个组件的指针alpha的指令,并将其视为创建指针的int数组。我现在觉得很傻,哈哈。再次感谢!很高兴您理解了。谢谢,我误解了声明int类型17个组件的指针alpha的指令,并将其视为创建指针的int数组。我现在觉得很傻,哈哈。再次感谢!我很高兴你明白了。