C中的以下两行:
int* a = (int *)calloc(automata_size, sizeof(int));
int* b = (a++);
我发现a和b共享同一个地址。如果我们有
,情况并非如此int* a = (int *)calloc(automata_size, sizeof(int));
int* b = a + 1;
为什么?
答案 0 :(得分:2)
前后++
运算符具有结果和副作用。
a++
的结果是增量前a
的值。 副作用是a
递增的。因此,如果a
类似0x4000
且sizeof (int)
为4,则执行后
int *b = a++;
b
的值为0x4000
,a
的值为0x4004
1 。
++a
的结果是a
加1的值。副作用是a
递增。这一次,b
和a
的值均为0x4004
。
注意:您需要以某种方式保留从calloc
返回的原始值,以便以后可以正确地free
。如果将修改后的a
值传递给free
,您(很可能)会收到运行时错误。
<小时/>
++
或向指针添加1会使其指向给定类型的下一个对象。在当今使用的大多数系统中,int
宽度为4个字节,因此在指针上使用++
会将4添加到指针值。
答案 1 :(得分:1)
所以我的建议是google post-increment和pre-increment。预增量(++a
)是:
b = ++a;
与以下内容相同:
a = a + 1;
b = a;
后增量:
b = a++;
与
相同b = a;
a = a + 1;
这适用于指针和整数。