如何在C中计算指针基址

时间:2018-12-12 12:08:39

标签: c pointers

我有一个如下所示的指针:

Traceback (most recent call last):
  File "source_file.py", line 7, in <module>
    mydict[j].append(k)
AttributeError: 'int' object has no attribute 'append'

在围绕基本指针地址计算进行了大量搜索之后,我找到了以下解决方案:

char *p=malloc(94)

此公式如何工作?谁能解释这个解决方案?

1 个答案:

答案 0 :(得分:2)

先决条件:

此说明:

size = 1 << e;

平均向左移动1,相当于1 * (2^e)左移。

在此说明中:

base = p & ˜(size-1);

p & ˜(size-1)意味着在p与大小的一元补码((size-1))之间进行二进制和(&)。

示例:

allocation space
------------
|          | 0001 1111
------------
|     .    |
|     .    |
|     .    |
------------
|          | p = 0001 0100
------------
|     .    |
|     .    |
|     .    |
------------
|          | 0001 0000
------------

e = log(16) = 4

size = 1 << 4 = 0001 0000

size - 1 = 0000 1111

~(size -1) = 1111 0000

base = 0001 0100 & 1111 0000 = 0001 0000