C程序在没有指针的情况下不断列出地址而不是值
我正在创建一个代码,将今天的日期与结构中的日期数组进行比较。每次我尝试打印日期时,我都会返回地址,而不是实际值本身C程序在没有指针的情况下不断列出地址而不是值,c,C,我正在创建一个代码,将今天的日期与结构中的日期数组进行比较。每次我尝试打印日期时,我都会返回地址,而不是实际值本身 #include <stdio.h> struct date { int month[2]; int day[2]; int year[4]; }; int cmpDate(struct date date1, struct date date2) { if (date1.year > date2.year) return
#include <stdio.h>
struct date {
int month[2];
int day[2];
int year[4];
};
int cmpDate(struct date date1, struct date date2)
{
if (date1.year > date2.year)
return 1;
if (date1.year < date2.year)
return -1;
if (date1.year == date2.year)
{
if (date1.month > date2.month)
return 1;
if (date1.month < date2.month)
return -1;
if (date1.month == date2.month)
{
if (date1.day > date2.day)
return 1;
if (date1.day < date2.day)
return -1;
if (date1.day == date2.day)
return 0;
}
}
};
struct date list[10] = { { 12, 3, 2016 },
{ 12 , 8 ,2012 },
{ 9, 3, 2016 },
{ 11, 7, 2012 },
{ 11, 7, 2020 },
{ 11, 7, 2016 },
{ 8, 1, 2017 },
{ 12, 29, 2017 },
{ 10, 1, 2018 } };
int main(void)
{
struct date today;
int i;
int j = 0;
printf("Enter todays date in the following format: MM DD YYYY:\n");
scanf_s("%d %d %d", today.month, today.day, today.year);
printf("\n");
for (i = 0; i < 10; i++)
{
printf("%d %d %d\n", list[i].month, list[i].day, list[i].year);
printf("%d %d %d\n", today.month, today.day, today.year);
printf("%d\n", j);
}
}
J只是我要调用函数cmpDate的一个占位符,所以现在它并不重要。有人能帮我打印值而不是地址吗
谢谢。因为结构的成员是数组,引用它们的名称(例如
列表[i])。day
实际上会导致指向数组的指针。您需要在printf
函数中分别引用数组中的每个元素来打印所有数字。您的数据结构定义不正确
我想你是这么想的
int year[4];
将year
定义为4位整数。它不是。而是将其定义为4int
值的数组
试图处理int[4]
对象作为int
对象会导致需要一段时间才能描述的问题。这与数组和指针之间的关系有关。有关详细信息,请参阅的第6节。但与此同时,与其担心为什么会得到类似于地址的东西,不如修复代码
int year;
一个
int
保证能够保存至少65535个值,并且在大多数系统上,您可能会使用大约20亿个值,因此您不需要做任何特殊的事情来表示年份。(如果您这样做了,您可以使用类型long
而不是int
,并对代码进行相应的调整以处理不同的类型,但在这里这不是必需的。)int-month[2];int-day[2];int-year[4];
int-month;int-day;int-year;
和scanf's(“%d%d%d”,today.month,today.day,today.year);
-->scanf_s(“%d%d%d”、&today.month、&today.day、&today.year)
如果编译器没有警告您参数与printf
的格式字符串不匹配,您需要启动编译器警告或获取不同的工具链,即使如此,仍然会启动它们。它会导致指向数组初始元素的指针,而不是指向整个数组。它是相同的内存地址,但是具有不同的类型。在任何情况下,使用%d
格式将指针值传递到printf
都有未定义的行为(最有可能的结果是打印地址的十进制形式)。
int year;