2 poetaster true Poetaster_true 于 2016.09.23 20:21 提问

有关c语言指针的问题,。。

#include
main()
{
int a = 0, *ptr;
ptr = &a;
*ptr = 3;
a = (*ptr) ++;
printf("%d,%d\n", a, *ptr);
}
a的值应该是几呢?请大神指点。

7个回答

u012314611
u012314611   2016.09.23 23:42
已采纳

答案是4
main()
{
int a = 0, *ptr;//定义一个变量a和一个int * 类型的指针 ptr
ptr = &a;//将a的地址赋给了ptr
*ptr = 3;//将ptr所指向的地址的值设置为3,此时a也为3
a = (*ptr) ++;//这里先将ptr所指向的地址中保存的值赋给了a,然后*ptr再自增,即*ptr=4,但是ptr是指向a的地址的,所以最后a也为4
printf("%d,%d\n", a, *ptr);
}

u013096045
u013096045   2016.09.23 20:37

指向同一内存空间, 答案是4

Meditator_hkx
Meditator_hkx   Rxr 2016.09.23 21:45
#include  <stdio.h>
int main()  {
    int a = 0, *ptr;   // 定义整型变量和指向整形变量的指针
    ptr = &a;          // 指针ptr指向a
    *ptr = 3;           // 此时 a=3
    a = (*ptr) ++;  // (*ptr)此时表示变量a,自加即是变量a的自加
    printf("%d,%d\n", a, *ptr);
    return 0;
}

最后输出结果为4

hongdeng123
hongdeng123   2016.09.23 21:59

3,3见代码注释
#include
int main() {
int a = 0, *ptr; // 定义一个整数和一个整形指针
ptr = &a; // 让ptr整形指针指向a
*ptr = 3; // 把ptr指向的a的值赋值为3
a = (*ptr) ++; // ++在后,先赋值在+1,所以还是3,3
printf("%d,%d\n", a, *ptr);
return 0;
}

hongdeng123
hongdeng123 回复HongdengLi: 图片发布出来
大约一年之前 回复
hongdeng123
hongdeng123 ![图片说明](http://img.ask.csdn.net/upload/201609/23/1474639602_708425.png)
大约一年之前 回复
tr1912
tr1912   2016.09.24 11:13

当然是4了,对于p这个变量,或者说指针,你在之前的时候把p里面的值变为了3,所以进行++运算的时候就会加1,带星号的p是指的p的存储空间的内容,而直接的p指的是p存储空间地址所对应的对象内容

coder_lj
coder_lj   2016.09.24 14:20

图片说明
图片说明

coder_lj
coder_lj 回复Poetaster_true: codeblocks
大约一年之前 回复
Poetaster_true
Poetaster_true 请问这个是在什么平台运行的?
大约一年之前 回复
coder_lj
coder_lj   2016.09.24 14:33

因为++在后,先赋值在+1,所以执行a=(*ptr)++;后a的值为3,此时虽然*ptr变为4,但ptr所指向的地址里面的内容不变,仍为3,即a和指针ptr所指向的内容均为3。而如果是a=++(*ptr),则等价于两条语句:++(*ptr);a=*ptr;所以此时输出4,4

Csdn user default icon
上传中...
上传图片
插入图片