指针增量和赋值

时间:2018-03-29 18:51:48

标签: c pointers memory-management

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;

为什么?

2 个答案:

答案 0 :(得分:2)

前后++运算符具有结果副作用

a++结果是增量前a的值。 副作用a递增的。因此,如果a类似0x4000sizeof (int)为4,则执行后

int *b = a++;

b的值为0x4000a的值为0x4004 1

++a结果a加1的值。副作用a递增。这一次,ba的值均为0x4004

注意:您需要以某种方式保留从calloc返回的原始值,以便以后可以正确地free。如果将修改后的a值传递给free,您(很可能)会收到运行时错误。

<小时/>

  1. 指针运算取决于指向类型的大小。应用++或向指针添加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;

这适用于指针和整数。