-1

有谁知道为什么下面的代码不适用于chars?它适用于ints 但是当我想用来char初始化结构时,它会失败并给出如下警告:

warning: assignment makes integer from pointer without a cast

我不知道这个警告是什么意思。

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

struct complex {
int re;
int im;
char name;
};

struct complex initialize (int k, int l, char nazwa)
{
    struct complex x;
    x.re = k;
    x.im = l;
    x.name= nazwa;
    return x;
}


int main ()
{
    struct complex e;
    struct complex f;
    int a;
    int b;
    char o;
    int c;
    int d;
    char p;
    a=5;
    b=6;
    o="t";
    e = initialize (a, b, o);
    c=8;
    d=3;
    p="u";
    f=initialize (c, d, p);
    printf("c1 = (%d,%d)\nc2 = (%d,%d)\n name 1=%s name 2=%s\n", e.re , e.im, f.re, f.im, e.name, f.name);

    return 0;
}
4

1 回答 1

5

"u"不是字符。它是一个字符串。一个字符数组。你想要'u'的。但是您将只有一个字符的名称,并且您需要将%sinprintf替换为%c.

除非您真的想要一个字符串,如果是这样,请将您char的结构更改为const char*. 函数参数也是如此:

struct complex {
    int re;
    int im;
    const char* name;
};

struct complex initialize (int k, int l, const char* nazwa) {
...
}

const char* o;
const char* p;

请注意,您可以初始化变量和结构。你的代码可以是这样的:

void print_complex(int n, struct complex c) {
    printf("c %d = (%d,%d)\n", n, c.re , c.im);
    printf("name=%s\n", c.name);
}

int main () {
    struct complex e = { 5, 6, "t" };
    struct complex f = { 8, 3, "u" };
    print_complex(1, e);
    print_complex(2, f);
    return 0;
}
于 2013-05-26T21:45:40.470 回答