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: 图片发布出来
接近 2 年之前 回复
hongdeng123
hongdeng123 ![图片说明](http://img.ask.csdn.net/upload/201609/23/1474639602_708425.png)
接近 2 年之前 回复
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
接近 2 年之前 回复
Poetaster_true
Poetaster_true 请问这个是在什么平台运行的?
接近 2 年之前 回复
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
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
关于指针的15个经典面试题
指针是C语言的关键,也是C的难点,该文档详细列举了15个经典的指针面试题。
C语言经典算法100例-068-练习使用指针3
直接看代码和注释吧。。。 //利用指针实现数组的滚动 本例实现数组像右滚动几位 #include #include int main() { int arr[20]; int i,n,offset; //输入数组大小和数组内容 printf("Total numbers?\n"); scanf("%d",&n); printf("Input
C语言指针总结
指针是C语言中的难点,也是C语言中的精华所在,本文档列举了指针使用中的常见注意事项及易混淆知识点的对比,为C语言的初学者掌握指针提供了清晰的思路。
关于C语言指针应用方面问题详解
c语言,有关指针应用问题,讲解的很仔细,透彻!
指针经典例题
关于指针的经典例题 上一篇博客,我基本上算是详细的介绍了一下指针,那么这篇博客就来分享几道有关指针的经典的例题。 1.代码如下,请问程序运行结果是多少? #include int main() { char *c[] = { "ENTER", "NEW", "POINT", "FIRST" }; char** cp[] = { c + 3, c + 2, c + 1, c }; ch
曾经进公司面试的C语言有关指针和数组的笔试题
原题如下: #include int main(void) { int i , j ; unsigned int Array_A[32]; unsigned int *pPointer; i = 0x0008 ; //测试i printf("i=%d\n",i) ; pPointer = Array_A ; *(pPointer++)=i++ ; //测试i pr
C语言的指针例题
1 使用语句实现下面所描述的功能: (1)定义一个double类型的指针head,并初始化为NULL。 (2)定义一个double类型的变量salary,并初始化为8000.75,让head指向salary。 (3)使用&显示变量salary所占内存的地址值。 (4)使用head显示salary所占内存的地址值。 (5)分别通过salary本身和head显示变量salary的值。 (
你需要知道关于C语言指针的一切
Everything you need to know about pointers in C 你需要知道关于C语言指针的一切 指针的定义 指针是内存地址。 (嗯,简短的段落。) 开始 假设你声明一个名为foo的变量。 int foo; 这个变量占用一些内存。 在当前主流的Intel处理器上,它占用四个字节的内存(因为int是四个字节
c语言指针问题小结
欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接和图片上传 LaTex数学公式 UML序列图和流程图 离线写博客 导入导出Markdown文件 丰富的快捷键 快捷键 加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl
C语言的下标运算与指针的关系
在《征服C指针》一书中看到a[ i ] 的本质,很多其实人对C语言的下标运算有误解的,总结如下。 我们知道, p= &a[ 0 ];也可以写成p= a; 对于这种写法,很多人都会认为数组不加下标运算,其实指的就是一个指针。 这种说法是不完全的,应该是数组名a与指针p本来就是同一种类型,而a[ i ]与*(a+i)意义相同。 所以,下标运算其实就是指针运算的简化版。Talk