[英]Confused about increment operator in C
我已经用 C 编写了一个程序来使用数组创建一个基本堆栈。 它按预期工作,但有一些我很困惑。 在 push 方法的第一行,我使用语法*top_ptr = *top_ptr+1
递增 *top_ptr 的值,它是一个指向变量 top 的指针。 当我尝试用*top_ptr++
替换这一行时,我认为它更简洁且含义相同,我收到一条警告,指出 Wunused 变量,并在运行时出现分段错误错误。 我的终端发出的警告信息,一字不差,是
warning: expression result unused [-Wunused-value]
*top_ptr++;
^~~~~~~~~~
我来自终端的确切错误消息是:
zsh: segmentation fault ./stacks/arrayi
当我用当前程序运行程序时,我的输出是我所期望的: 1 2 3 %
我的代码如下。 同样,我感到困惑的行是 push 方法的第一行,也就是第 17 行。如果您回答了这个问题,那么感谢您的时间和考虑。
#include <stdio.h>
#define MAX_SIZE 101
void push(int *, int *, int);
void print(int *, int *);
int main() {
int top = -1;
int *top_ptr = ⊤
int arr[MAX_SIZE];
push(arr, top_ptr, 1);
push(arr, top_ptr, 2);
push(arr, top_ptr, 3);
print(arr, top_ptr);
}
void push(int *array, int *top_ptr, int x) {
*top_ptr = *top_ptr + 1;
array[*top_ptr] = x;
}
void print(int *array, int *top_ptr) {
for (int i = 0; i <= *top_ptr; i++) {
printf("%d ", array[i]);
}
}
*top_ptr++
是*(top_ptr++)
,这是错误的,因为它改变了top_ptr
,这不是你想要做的。
你想要(*top_ptr)++
。
编译器警告您表达式结果未使用,因为在(top_ptr++)
, *
获取(top_ptr++)
指向的值,但没有对该值执行任何操作。 这是可疑的,因此编译器警告您已经告诉它获取一个值,但不要对它做任何事情。
相反,使用(*top_ptr)++
,它不会警告您,因为++
修改了(*top_ptr)
指向的对象,因此表达式以有用的操作结束。
你应该做的
(*top_ptr)++;
那个支架很重要。 如果你不给括号,那么基本上它会像
*(top_ptr++);
即首先指针 top_ptr 将增加,然后它会被尊重。 这就是为什么它会给你分段错误。
(并且 top_ptr 指向的值不会增加)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.