相关疑难解决方法(0)

如何在符合C标准的情况下一般地转换指针的地址

通常使用隐式函数返回void*转换为分配指定指针,就像malloc()一样:

void *malloc(size_t size);
int *pi = malloc(sizeof *pi);
Run Code Online (Sandbox Code Playgroud)

我希望在传递目标指针的地址时执行相同的赋值,而不从函数内部(不在其体内,也不在参数中)显式地转换其类型.

以下代码似乎实现了这一点.

  1. 我想知道代码是否完全符合(任何)C标准.
  2. 如果它不符合,我想知道是否有可能在符合(任何)C标准的情况下达到我的要求.

.

#include <stdio.h>
#include <stdlib.h>

int allocate_memory(void *p, size_t s) {
    void *pv;
    if ( ( pv = malloc(s) ) == NULL ) {
        fprintf(stderr, "Error: malloc();");
        return -1;
    }
    printf("pv: %p;\n", pv);
    *((void **) p) = pv;
    return 0;
}

int main(void) {
    int *pi = NULL;
    allocate_memory(&pi, sizeof *pi);
    printf("pi: %p;\n", (void *) pi);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

结果:

pv: 0x800103a8;
pi: 0x800103a8;
Run Code Online (Sandbox Code Playgroud)

c pointers strict-aliasing

11
推荐指数
2
解决办法
554
查看次数

标签 统计

c ×1

pointers ×1

strict-aliasing ×1