[英]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.