作者cheinhun (abc)
看板C_and_CPP
标题Re: [问题] ++运算符号实际运作的时机?
时间Sun Jun 28 02:11:59 2009
※ 引述《giveatry (new life)》之铭言:
: ※ 引述《giveatry (new life)》之铭言:
: : #include <stdio.h>
: : int main(){
: : int* c = 1;
: : printf("c++ is %d\n", c++);
: : printf("c is %d\n", c);
: : return 0;
: : }
: : 印出来的结果
: : c++ is 1
: : c is 5
: : 为什麽会这样呢ꄊ: : 谢谢
: 我改成这样的时候
: #include <stdio.h>
: #include <stdlib.h>
: int main(){
: int* c = (int*)malloc(sizeof(int)*1);
: *c = 1;
: printf("c++ is %d\n", c++);
: printf("c is %d\n", c);
: return 0;
: }
: 印出来的结果是
: c++ is 159821832
: c is 159821836
: 改成这样的话,好像就是印记忆体位置了
: 愈搞愈迷糊了@@
虽然我不常写c不过看好像没人要理你这个问题
我就来点你一下好了,先说~我是看你的实验说故事的
你第一个宣告指标c
int* c=1;
是把指标c指到1这个位置了
而
printf("c++ is %d\n", c++);
印出了c这个指标位置1 再移到下一个位置
不过你宣告的是int这个有4个byte,所以跳4,因此你看到的+4是这边来的
第二个int* c = (int*)malloc(sizeof(int)*1);
这个是你叫电脑帮你选出一个有一个int大小的位置,把c指向那边
电脑给你159821832这个位置,接下来你又作了一样的事情
所以呢,从头到尾差别只有
手动选号(1) 跟
电脑选号(159821832) 的差别而已
不过手动选号是很危险的
因为你不知道这号码有没有人在使用,除非你很确定
否则不要作这样的动作
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 58.115.26.253
1F:→ cheinhun:仔细看了一下推文..victortom大大好像解释一样的东西XD 06/28 02:15
2F:→ Cloud:应该是原PO的症结在於他不晓得 int* c=1; 06/28 09:06
3F:→ Cloud:printf("c++ is %d\n", c++); 也是在印出位置 06/28 09:06
4F:推 giveatry:感谢,我终於知道我的问题在哪里了…问题在int* c = 1 06/28 10:05
5F:推 giveatry:若是*c = 1,是指把c所指的值设为1。但是int*c =1和 06/28 10:18
6F:→ giveatry:*c = 1意义完全不同,我就是这样搞混了… 06/28 10:18
7F:推 in09:我怎麽觉得你还是不懂耶 "int* c = 1 *c = 1意义完全不同"?? 06/28 14:46
8F:→ giveatry:int* c = 1是宣告一个int指标并将其指向位址1 06/28 15:09
9F:→ giveatry:*c = 1是把指标c所指之值设为1,难道我又误解了吗? 06/28 15:09
10F:推 VictorTom:int *c = 1; 宣告指标变数c并使初值为1(指向1这个位址) 06/28 15:22
11F:→ VictorTom:*c = 1; 指标c目前所指的位址给定新值为1(被指位址给1) 06/28 15:23
12F:→ VictorTom:Ex: int *c = 0x0100; *c = 0x0010; 06/28 15:25
13F:→ VictorTom:则c会指到0x0100这个位址, 并让这个位址上的值变0x0010 06/28 15:25
14F:→ VictorTom:PS. 未确认的位址胡乱给值很危险的 XD 06/28 15:27
15F:推 giveatry:v大,所以我推文8,9行的理解看起来和你是一样的? 06/28 17:13
16F:→ cheinhun:你没误解啦 老实说要是我我也不会知道是那样 我从来不会 06/28 20:43
17F:→ cheinhun:像你那样写 因为pointer通常拿来动态宣告一个阵列或是写 06/28 20:44
18F:→ cheinhun:类似linked list这样的东西 你应该也只是试验而已 写程式 06/28 20:44
19F:→ cheinhun:就是这样啊 精神很不错的 06/28 20:44
20F:→ cheinhun:啊 还有call by reference也是pointer蛮重要的概念 其实 06/28 20:54
21F:→ cheinhun:爬文看看 上面很多人讨论过一样的东西唷 06/28 20:54
22F:推 VictorTom:其实我只是搞不清楚到底谁了解的情况怎麽办所以乾脆完整 06/28 23:39
23F:→ VictorTom:重推一次而已....XD 06/28 23:39