Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C语言中正确的指针算法_C++_C_Pointers_Pointer Arithmetic - Fatal编程技术网

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后面的行不工作,导致崩

我正在尝试学习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后面的行不工作,导致崩溃,而前面的行运行得很好?我试图让第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数组。我现在觉得很傻,哈哈。再次感谢!我很高兴你明白了。