C++-关于C/C++一道题的疑问?

前端开发 前端开发 主题:1148 回复:2395

C++-关于C/C++一道题的疑问?

夜无邪 发布于 2017-05-20 字数 146 浏览 1003 回复 5
int arr[]={6,7,8,9,10}; 
int *ptr=arr;
*(ptr++)+=123;
printf("%d,%d",*ptr,*(++ptr));

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

支持 Markdown 语法,需要帮助?

评论(5

甜柠檬 2017-09-21 5 楼

int arr[]={6,7,8,9,10};
//声明数组并初始化
int ptr=arr;
//ptr指针指向数组
(ptr++)+=123;
//ptr++不是++ptr,所以等于是ptr+=123 以后再ptr++ 此时arr[0]=129 //ptr指向arr[1]
printf("%d,%d",
ptr,*(++ptr));
//函数的参数是按照参数列表从右向左进栈的,所以先执行++ptr,ptr指向arr[2]
//后面一个输出是arr[2]=8 前面一个也是arr[2]=8 最后数组是 129,7,8,9,10 ptr指向arr[2]

浮生未歇 2017-09-18 4 楼

printf("%d,%d",ptr,(++ptr));
是先算右边的*(++ptr),相当于a[2], 所以相当于printf("%d,%d",a[2],a[2]);

清晨说ぺ晚安 2017-09-04 3 楼

 (ptr++)+=123;
// 之后,arr[0]==129, ptr == &a[1]
printf("%d,%d",
ptr,(++ptr));
// 相当于
++ptr;
printf("%d,%d",
ptr, *ptr);

夜无邪 2017-08-11 2 楼

int arr[]={6,7,8,9,10};

int *ptr=arr; ==>指向数据首地址,也就是6所在的地址

*(ptr++)+=123; ==>这句计算完成之后就指向7所在的地址

printf("%d,%d",ptr,(++ptr));==>++ptr是在之前+1,因此移动到8的地址。printf打印的时候是编译之后的代码,也就是说第一个ptr也已经指向了8的地址。

归属感 2017-06-17 1 楼

前三行都很明显, 第四行, C语言函数调用标准是右边的参数先入栈, 所以ptr先自增, 所以输出的都是8.

 //定义数组
int arr[]={6,7,8,9,10};
//令ptr指向arr数组的首地址
int ptr=arr;
//令arr[1] += 123;
(ptr++)+=123;
//右边的参数先入栈, 所以压栈的是arr[2], arr[2], 输出两个8.
printf("%d,%d",ptr,(++ptr));