从不同大小的整数转换为指针

时间:2017-09-13 08:20:09

标签: c pointers

我一直收到此警告

  

c:9:80:警告:从不同大小的整数转换为指针[-Wint-to-pointer-cast]

     

printf(" Char =%c ASCII =%i hex =%x pointer =%p \ n",i,i,i,(void *)i);

代码

#include<stdio.h>

int main (void) {
    int *i;
    for (int i = 75; i < 75 + 26; i++) {
        printf("Char= %c    ASCII = %i    hex = %x    pointer = %p  \n", i, i, i , (void*)i ); 
    }
    return(0); 
} 

2 个答案:

答案 0 :(得分:2)

我看不出编译器警告没有回答的问题。你有一个类型为int的变量“i”(在64位平台上为32位),在主程序中隐藏另一个名为“i”的变量。

您正在将int变量转换为void*,并且编译器说您不能这样做,因为您的位数是32位。重命名程序中名为i的两个变量之一来解析。

答案 1 :(得分:0)

您收到警告,因为变量“i”在同一范围内声明了两次。循环中'i'的内存地址不会改变,那么你需要在循环外部指针的内容是什么?

#include<stdio.h>

int main (void) {
    for (int i = 75; i < 75 + 26; i++) {
        printf("Char= %c    ASCII = %i    hex = %x    pointer = %p  \n", i, i, i , &i );
    }
   return(0);
}

或者如果您仍想要两个变量,那么仍然如此。

#include<stdio.h>

int i;
int *j = &i;

int main (void) {
for ( i = 75; i < 75 + 26; i++) {
    printf("Char= %c    ASCII = %i    hex = %x    pointer = %p  \n", i, i, i , (void *)j );
}
return(0);
}