繁体   English   中英

C-为什么我的int值非常大?

[英]C - Why are my int values extremely large?

我将尝试在代码片段中提供足够的信息,因为其中大多数与问题无关。 如果您需要更多代码,请告诉我。

我正在尝试使用fscanf从txt文件读取内容,以制作矩阵。 该文件的格式如下:

(整数声明行数)

(整数声明的列数)

(值1,值2,......,值n)

(最后一行的值)

我使用以下代码(修剪后的结果)获取矩阵中的行数和列数:

FILE* fp;
int row,col;    

row = (int) malloc(sizeof(int));
col = (int) malloc(sizeof(int));

fp = fopen(fname, "r");
fscanf(fp, "%d %d", row, col);
printf("%d %d \n", row, col);

打印出的值虽然有所不同,但始终很大,例如“ 5977072 5977088”或“ 4797424 4797440”。 我对C很陌生,很想知道为什么会这样。 我的两个假设如下:

  1. 为这些值分配的内存首先包含这些大数字,并且由于某种原因,未将row和col设置为矩阵txt文件中的值。

  2. 正在打印的是行和列的地址。

如果是场景1,那么在设置row和col的值时我做错了什么? 我应该在某些时候操纵指针吗?

您未能将rowcol声明为指向整数的指针...

您的声明应该看起来像

int *row, *col;

因此,您只是在生成随机垃圾数据。

更新指针是C的关键方面。 指针的最简单定义是它指向内存区域。

当您使用malloc(n) ,它会发现未使用内存的连续区域,该区域大n个字节。 因此,因为使用了malloc ,所以必须将结果存储在指针中。

指针对于返回多个值也很有用,可以将诸如scanf的函数传递给用户希望用返回值填充的内存区域的指针。 这就是为什么您这样使用scanf原因:

int row, col;
scanf("%d %d", &row, &col);

或者,您可以像在问题中一样在堆上进行分配:

int *row = malloc(sizeof(int));
int *col = malloc(sizeof(int));
scanf("%d %d", row, col);

两种方式都是完全合法的。 尽管对于像int这样的数据类型,它恰好小于int * (在大多数系统上,在其他系统上,它的大小可以相同),但对于后者却不屑一顾。

暂无
暂无

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

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