繁体   English   中英

指针地址未打印

[英]Pointer Address is Not Printing

以下代码的主输入为 1-5,这是代码将运行的次数。 代码打印出指针分配前后的地址。

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

int main(int argc, char **argv)
{
    char character ;
    int integer ;
    char string[50] ;
    float fp ;
    int i, x = 5 ;
    
    char* cPointer ;
    int* intPointer ;
    char* sPointer ;
    float* fpPointer ;
    
    if (argc > 1)
    {
        x = atoi(argv[1]) ;
    }
    else if (x > 5 || x < 1)
    {
        printf("Invalid number, please input a number between 1-5!") ;
        exit (1) ;
    }
    
    int count = 0;
    while (count <= x)
    {
        printf("Please enter a character: ") ;
        scanf(" %c", &character) ;
        printf("Please enter an integer: ") ;
        scanf("%d", &integer) ;
        printf("Please enter a string: ") ;
        scanf("%s", string) ;
        printf("Please enter a floating point:") ;
        scanf("%f", &fp) ;
        
        printf("\n\nCharacter Pointer: %p", cPointer) ;
        printf("\nInteger Pointer: %p", intPointer) ;
        printf("\nString Pointer: %p", sPointer) ;
        printf("\nFloating Point Pointer: %p", fpPointer) ;
        
        printf("\n\nCharacter: %c", character) ;
        printf("\nInteger: %d", integer) ;
        printf("\nString: %s", string) ;
        printf("\nFloating Point: %.2f", fp) ;
        
        cPointer = &character ;
        intPointer = &integer ;
        fpPointer = &fp ;
        sPointer = string ;

        printf("\n\nCharacter Pointer: %p", cPointer) ;
        printf("\nInteger Pointer: %p", intPointer) ;
        printf("\nString Pointer: %p", sPointer) ;
        printf("\nFloating Point Pointer: %p\n\n", fpPointer) ;
        
        count++ ;
    }

    return 0;
}

问题出现在 output 上,我第一次尝试得到的不是浮点的指针地址,而是(nil)

Character Pointer: 0x7f0eeed0c1f8                                                
Integer Pointer: 0x7f0eef2d6000                                                  
String Pointer: 0x7f0eef2e91c8                                                   
Floating Point Pointer: (nil)                                                    
                                                                                 
Character: a                                                                     
Integer: 1                                                                       
String: aa                                                                       
Floating Point: 1.10                                                             
                                                                                 
Character Pointer: 0x7ffe236e563f                                                
Integer Pointer: 0x7ffe236e5640                                                  
String Pointer: 0x7ffe236e5670                                                   
Floating Point Pointer: 0x7ffe236e5644                                           
                                                                                 
Please enter a character: b                                                      
Please enter an integer: 2                                                       
Please enter a string: bb                                                        
Please enter a floating point:2.2                                                
                                                                                 
                                                                                 
Character Pointer: 0x7ffe236e563f                                                
Integer Pointer: 0x7ffe236e5640                                                  
String Pointer: 0x7ffe236e5670                                                   
Floating Point Pointer: 0x7ffe236e5644                                           
                                                                                 
Character: b                                                                     
Integer: 2                                                                       
String: bb                                                                       
Floating Point: 2.20                                                             
                                                                                 
Character Pointer: 0x7ffe236e563f                                                
Integer Pointer: 0x7ffe236e5640                                                  
String Pointer: 0x7ffe236e5670                                                   
Floating Point Pointer: 0x7ffe236e5644  

没有初始化您声明的指针:

char* cPointer ;
int* intPointer ;
char* sPointer ;
float* fpPointer ;

然后您尝试打印它们的值:

printf("\n\nCharacter Pointer: %p", cPointer) ;
printf("\nInteger Pointer: %p", intPointer) ;
printf("\nString Pointer: %p", sPointer) ;
printf("\nFloating Point Pointer: %p", fpPointer) ;

这些变量的内容是未定义的! 读取未初始化的变量是未定义的行为 在此处阅读更多内容: C 中已声明的未初始化变量会发生什么情况? 它有价值吗? 您不能期望任何有意义的结果,因此如果其中一些打印为(nil) ,那只是因为由于某种原因它们碰巧被初始化为0 您在此处打印的值是打印时堆栈上的任何乱码,它们毫无意义。 对于它的价值,尝试打印它们可能会使程序崩溃。

然后,在第二组printf之前,您实际上为指针分配了一些值:

cPointer = &character ;
intPointer = &integer ;
fpPointer = &fp ;
sPointer = string ;

当然,现在它们都被正确地初始化为一个值,打印时你会得到有意义的结果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM