C语言面试题——指针运算

#include <stdio.h>

int main(void)
{
	int a[] = {6,7,8,9,10};
	int *ptr = a;
	*(ptr++) += 123;
	printf("%d, %d\n",*ptr, *(++ptr));
	return 0;
}

这里有些疑点需要解释一下,估计只是本人不太清楚,故这里记录一下

首先,数组a的地址和值为:


*(ptr++) += 123;

这句语句执行之后,我在gdb里的显示是这样的:

就是ptr指针a[1]:7

接下去执行 printf("%d, %d\n",*ptr, *(++ptr));

我想在执行printf语句是,ptr又自增了一个单位。。指向了a[2]了。所以才会打印出8,8;

但是我觉得这种编程风格不太好,应该是应试教育出的题目,真正写代码是很少这样写的。

在gcc编译的结果有如下warning:operation on 'ptr' may be undefined

原文地址:https://www.cnblogs.com/CodeWorkerLiMing/p/12007680.html