English 中文(简体)
Question regarding de-referencing structure pointers
原标题:

I am compiling this piece of code and I get compilation errors saying " dereferencing pointer to incomplete type" . I get the errors for the last print statement and before that where I try to point (*temp). num to the address of b

void main()
{

    struct {
        int xx;
        char *y;
        int * num;
        struct x *next;
    }x;

    struct x* temp;
    int b = 10;

    temp = ((struct x *)malloc(sizeof(x)));

    (*temp).num = &b;

    x.next = temp ;

    printf(" %d
",temp->num, x.next->num);

}
问题回答

The problem is that the statement:

struct {
   ...
} x;

defines an unnamed instance x - not a named type x .

So when you refer to struct x from within there all the compiler knows is that you want some pointer of type x - which you ll define later (and you never do).

To define a named type x you need:

struct x {
   ...
};

I think you meant:

struct x {
  int xx;
  char *y;
  int * num;
  struct x *next;
}x;

You reference a "struct tag" that you haven t defined wherever you use struct x. You have no way to refer to the type of variable x. Since you want to refer to it with struct x you must define the struct tag.

I think it s the fact that your struct refers to itself before it s completely defined.

In particular, your struct has no name; "x" is the name of a variable having such a structure, but there is no type name.

Just declare "struct x { ... } x" and it should be fine.

Besides what Draemon write about struct x {...} x, I took the liberty of correcting the various other small problems like the printf():

void main()
{
  struct x {
    int xx;
    char *y;
    int *num;
    struct x *next;
   } x;
   struct x* temp;
   int b = 10;
   temp = ((struct x *)malloc(sizeof(struct x)));
   (*temp).num = &b;
   x.next = temp ;
   printf("%d %d
",*temp->num, *x.next->num);
}

Just out of curiosity: What are you trying to achieve?

Please note that void main() has never been a valid prototype for main in C or C++.

If you want to pointer to the struct you are declaring within the struct, you need to tag the struct. The typedef is sometimes useful, but not necessary.

Please study the differences between your code and the following and understand why the differences are there. That will help you learn. So will reading the C FAQ list (e.g. see Structures, Unions, and Enumerations.

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

int main(void) {
    int b = 10;

    typedef struct x_struct {
        int xx;
        char *y;
        int *num;
        struct x_struct *next;
    } x;

    x *temp = malloc(sizeof(*temp));
    if ( !temp ) {
        return EXIT_FAILURE;
    }

    temp->num = &b;
    temp->next = temp;

    printf("%d %d
", *(temp->num), *(temp->next->num));
    return 0;
}




相关问题
Fastest method for running a binary search on a file in C?

For example, let s say I want to find a particular word or number in a file. The contents are in sorted order (obviously). Since I want to run a binary search on the file, it seems like a real waste ...

Print possible strings created from a Number

Given a 10 digit Telephone Number, we have to print all possible strings created from that. The mapping of the numbers is the one as exactly on a phone s keypad. i.e. for 1,0-> No Letter for 2->...

Tips for debugging a made-for-linux application on windows?

I m trying to find the source of a bug I have found in an open-source application. I have managed to get a build up and running on my Windows machine, but I m having trouble finding the spot in the ...

Trying to split by two delimiters and it doesn t work - C

I wrote below code to readin line by line from stdin ex. city=Boston;city=New York;city=Chicago and then split each line by ; delimiter and print each record. Then in yet another loop I try to ...

Good, free, easy-to-use C graphics libraries? [closed]

I was wondering if there were any good free graphics libraries for C that are easy to use? It s for plotting 2d and 3d graphs and then saving to a file. It s on a Linux system and there s no gnuplot ...

Encoding, decoding an integer to a char array

Please note that this is not homework and i did search before starting this new thread. I got Store an int in a char array? I was looking for an answer but didn t get any satisfactory answer in the ...

热门标签