赋值从整数中生成指针而不使用c语言中的强制转换[默认启用]

时间:2014-09-28 10:03:17

标签: c pointers casting

代码:

#include<stdio.h>
#include<stdlib.h>
struct node 
{
    int data;
     struct node *next;
};
struct node *head,*temp;
int insert_end(int);
int insert_begin(int);
int display(void);
int delete_end(void);
int delete_begin(void);

int main()
{
    head=(struct node *)malloc(sizeof(struct node));
    temp=(struct node *)malloc(sizeof(struct node));
    head->next = -1;
    int choice,a,b;
label:
printf("\n\t1.insert_end 2. insert_begin 3.\n delete_end 4.delete_begin   \n5.display 6.exit ");
scanf( "%d",&choice);
switch ( choice )
{
    case 1:
{
    printf("\tenter the no to be insert at the end ");
    scanf("%d",&a);
    insert_end (a);

    goto label;

}
case 2:
printf("\tenter the no to be insert at the beginnig ");
scanf("%d",&a);
insert_begin (a);

goto label;

case 3:
{
    b = delete_end();
    if ( b == 0)
    {    
        printf( " \t\tfailed ! ! \n");}
        else 
        {
            printf( " \t\t success ! ! \n");}

         goto label;
}

case 4:
{
    b = delete_begin();
    if ( b == 0)
    {
        printf( " \t\tfailed ! ! \n");}
    else 
    {
        printf( " \t\t success ! ! \n");}

        goto label;
    }
 case 5:
 {
     temp =head ;
     display();
     goto label;
 }
 case 6:
 {
     exit (0);
 }
default: 
{
    printf( "wrong options");
    goto label;
 }

}
}

int insert_end ( int a )
{
temp = head;
while (1)
{
    if (temp->next == -1)
    {
        temp->data =a;
        temp->next =0;
        return 0;
    }
        else if (temp->next == 0)
        {
            temp->next = malloc(sizeof ( struct node));
            temp =temp->next;
            temp->data =a;
            temp->next =0;
            return 0;
        }
       else 
       {
           temp = temp->next;
       }
   }
}


int display()
{
temp=head;
while (1)
{
    if (head->next == -1)
    {
        printf( "\tEmpty ! ! !\t\n");
        break;
    }
    else  if ((head->next == 0) )
    {
        printf( " %d ", head->data);
        break;
     }
 else if (temp->next != 0 )
 {
     printf (" %d ->", temp->data );
     temp =temp->next ;
 }
 else if (temp->next == 0 )
 {
     printf(" %d ", temp->data);
     return 0;
 }
}
}


int insert_begin(int a)
{
if(head->next == -1)
{
    head->data =a;
    head->next=0;
    return 1;
}
else 
{
    temp =malloc(sizeof ( struct node ));
    temp->data =a;
    temp->next = head;
    head = temp;
    return 1;
 }
}

int delete_end (void)
{
temp=head;
while (1)
{
    if (head->next == -1)
    {
        return 0;
    }
    else if (head->next == 0)
    {
        head->next = -1;
        return 1;
    }
    else if (temp->next->next == 0)
    {
        temp->next =0;
        return 1;
    }
    else 
    temp=temp->next;
}
}


int delete_begin(void)
{
if ( head->next == -1)
{
     return 0;
}
     else if ( head -> next == 0)
     { 
          head->next = -1;
          return 1;
     }
     else 
     {
         head=head->next;
         return 1;
     }
}

error:

linkedlist1.c: In function ‘main’:

linkedlist1.c:19:12: warning: assignment makes pointer from integer without a cast [enabled by default]

head->next = -1;
        ^
linkedlist1.c: In function ‘insert_end’:

linkedlist1.c:87:16: warning: comparison between pointer and integer [enabled by default]
if (temp->next == -1)
            ^
linkedlist1.c: In function ‘display’:

linkedlist1.c:115:16: warning: comparison between pointer and integer [enabled by default]
if (head->next == -1)
            ^
linkedlist1.c: In function ‘insert_begin’:

linkedlist1.c:141:15: warning: comparison between pointer and integer [enabled by default]
 if(head->next == -1)
           ^
linkedlist1.c: In function ‘delete_end’:

 linkedlist1.c:162:16: warning: comparison between pointer and integer [enabled by default]
 if (head->next == -1)
            ^
linkedlist1.c:168:12: warning: assignment makes pointer from integer without a cast [enabled by default]
 head->next = -1;
        ^
linkedlist1.c: In function ‘delete_begin’:

linkedlist1.c:184:17: warning: comparison between pointer and integer [enabled by default]
 if ( head->next == -1)
             ^
linkedlist1.c:190:12: warning: assignment makes pointer from integer without a cast [enabled by default]
 head->next = -1;
        ^

当我尝试使用GCC进行编译时,我最终会发出一条警告,说明&#34;赋值使得整数指针没有强制转换[默认启用]请帮我解决上述警告。我不知道错误是什么。

2 个答案:

答案 0 :(得分:0)

用你的&#34;警告&#34;你还得到一个字符串号码,其中&#34;警告&#34;出现。 请给出出现错误的字符串

我第一次没有看到你的警告

只需将-1替换为NULL或将-1替换为(void *)-1

课程标准应写入NULL,但如果您真的需要,可以写(void *)-1

答案 1 :(得分:0)

语句

不满足编译器
head->next = -1;

如果您使用NULL而不是-1并写入

会更好
head->next = NULL;