当指针指向指针时,我会收到警告:赋值从指针生成整数

use*_*029 3 c pointers gcc-warning

我讨厌发布这个,因为有这么多,但它们似乎都没有解决我所看到的.正常问题(未声明的函数,无意的强制转换,对基本指针的误解)似乎不适用于此处.这是我的代码的精简版:

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

extern void* malloc ( size_t size );

typedef struct {
    size_t      size;
    uint8_t*    buffer, curr, next;
} buffer_t;

void init( buffer_t* b, int size ) {
    b->size   = (size_t) size;
    b->buffer = (uint8_t*) malloc( sizeof(uint8_t) * b->size + 1 );
    b->curr   = (uint8_t*) b->buffer; // warning: assignment makes integer from pointer without a cast [enabled by default]
    b->next   = (uint8_t*) b->buffer; // warning: assignment makes integer from pointer without a cast [enabled by default]
}

int main ( int argc, char* argv[] ) {
    buffer_t buf;

    init( &buf, 16 );

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

没有演员阵容就会失败,但是把它们放进去会更加明显.

我正在使用gcc 4.7.2在MinGW/MSYS下编译WinXP(是的,是的,是的).使用以下命令:

gcc -std=c99 -Wall -o testing test.c
Run Code Online (Sandbox Code Playgroud)

有帮助吗?

cni*_*tar 10

uint8_t*    buffer, curr, next;
Run Code Online (Sandbox Code Playgroud)

你写它的方式,buffer是一个指针,currnext仅仅是uint8_t秒.你可能意味着:

uint8_t    *buffer, *curr, *next;
Run Code Online (Sandbox Code Playgroud)

更好的(不太容易出错)就是让每个字段都在自己的行上.