Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何定义全局数组(从另一个函数获取长度)?_C_Arrays_Data Structures_Global Variables - Fatal编程技术网

C 如何定义全局数组(从另一个函数获取长度)?

C 如何定义全局数组(从另一个函数获取长度)?,c,arrays,data-structures,global-variables,C,Arrays,Data Structures,Global Variables,如何编写一个具有全局数组的C代码,该数组的长度从main()开始作为用户输入 我尝试了很多不同的方法,但迄今为止没有一种有效,例如: #include <stdio.h> const int length; int array[length]; int main() { scanf("%d",&length); } #包括 常量int长度; 整数数组[长度]; int main() { 扫描频率(“%d”和长度); } 你显然不能。当length得到它的值时,您

如何编写一个具有全局数组的C代码,该数组的长度从main()开始作为用户输入

我尝试了很多不同的方法,但迄今为止没有一种有效,例如:

#include <stdio.h>

const int length;
int array[length];

int main()
{
    scanf("%d",&length);
}
#包括
常量int长度;
整数数组[长度];
int main()
{
扫描频率(“%d”和长度);
}

你显然不能。当
length
得到它的值时,您是否希望内存分配能够神奇地向后、向后地发生

这不是C的工作原理,也不是那么抽象


您必须使数组只是一个指针(然后可以在需要时声明
extern
),并将长度作为一个单独的变量,而且
extern
您显然不能。当
length
得到它的值时,您是否希望内存分配能够神奇地向后、向后地发生

这不是C的工作原理,也不是那么抽象


您必须使数组只是一个指针(然后可以在需要时声明
extern
),并将长度作为一个单独的变量,也就是
extern
参考您的代码,我可以指出:

int array[length];
这当然行不通,因为在编译时,
数组的大小是未知的。您不能静态地定义大小不确定的数组(从编译过程中编译器的角度来看)
如果您想决定数组运行时的大小(即动态地),您不能通过声明变量的方式来决定

另外,将
const
length
一起使用在这里也不起作用。摆脱常量
const

您可以而且应该做的是,获取一个
int
指针,并获取动态分配的内存的起始地址。 你可以用这个函数

我不会为您编写完整的代码,但它应该包含如下内容:

int *ptr = malloc(length * sizeof(int));
从这里开始,如果用户输入了10(例如,
length
=10),并且
malloc
没有返回
NULL
,那么您应该能够从存储在
ptr
指针中的地址开始存储最多10个整数,当然,还可以通过增加指针
ptr
来访问它们


如果您阅读了
malloc
的任何手册页面,您应该能够处理所需的头文件。我不是在写您需要的文件,因为我希望您自己阅读手册页和代码。

参考您的代码,我可以指出:

int array[length];
这当然行不通,因为在编译时,
数组的大小是未知的。您不能静态地定义大小不确定的数组(从编译过程中编译器的角度来看)
如果您想决定数组运行时的大小(即动态地),您不能通过声明变量的方式来决定

另外,将
const
length
一起使用在这里也不起作用。摆脱常量
const

您可以而且应该做的是,获取一个
int
指针,并获取动态分配的内存的起始地址。 你可以用这个函数

我不会为您编写完整的代码,但它应该包含如下内容:

int *ptr = malloc(length * sizeof(int));
从这里开始,如果用户输入了10(例如,
length
=10),并且
malloc
没有返回
NULL
,那么您应该能够从存储在
ptr
指针中的地址开始存储最多10个整数,当然,还可以通过增加指针
ptr
来访问它们


如果您阅读了
malloc
的任何手册页面,您应该能够处理所需的头文件。我不是在写您需要的文件,因为我希望您自己阅读手册页和代码。

您需要使用malloc创建一个动态数组来解决此问题,如以下示例所示

#include<stdio.h>
#include<stdlib.h>
int *array;
main()
{
    int length;
    scanf("%d",&length);
    array = (int *)malloc (length*sizeof(int));
    // array[0] = 100;
}
#包括
#包括
int*数组;
main()
{
整数长度;
扫描频率(“%d”和长度);
数组=(int*)malloc(长度*sizeof(int));
//数组[0]=100;
}

我假设您的数组长度适合整数范围,或者相应地更改。

您需要使用malloc创建一个动态数组来解决此问题,如以下示例所示

#include<stdio.h>
#include<stdlib.h>
int *array;
main()
{
    int length;
    scanf("%d",&length);
    array = (int *)malloc (length*sizeof(int));
    // array[0] = 100;
}
#包括
#包括
int*数组;
main()
{
整数长度;
扫描频率(“%d”和长度);
数组=(int*)malloc(长度*sizeof(int));
//数组[0]=100;
}

我假设您的数组长度适合整数范围,或者相应地更改。

在文件范围(任何函数体之外)声明的数组具有
静态
存储持续时间,这意味着在执行任何语句之前,程序一启动就为它们分配空间。因此,必须在编译时知道它们的大小

如果您想分配全局可见但在运行时之前不会调整大小的内存,则必须使用动态内存分配

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

int *array;     // personally, I would name these something like
size_t length;  // g_array and g_length to emphasize their "global-ness"
                // and disambiguate them from any local variables.

int main( void )
{
  // get length value somehow

  array = malloc( sizeof *array * length );
  if ( !array )
  {
    // Could not allocate memory, handle as appropriate
  }

  // do stuff with array

  free( array );
  return 0;
}
#包括
#包括
int*数组;//就我个人而言,我会把这些命名为
大小与长度;//g_数组和g_长度以强调其“全局性”
//并从任何局部变量中消除它们的歧义。
内部主(空)
{
//以某种方式获取长度值
数组=malloc(sizeof*数组*长度);
if(!数组)
{
//无法分配内存,请根据需要处理
}
//用数组做东西
自由(数组);
返回0;
}

在文件作用域(任何函数体之外)声明的数组具有
静态
存储持续时间,这意味着在执行任何语句之前,程序一启动就为它们分配空间。因此,必须在编译时知道它们的大小

如果您想分配全局可见但在运行时才调整大小的内存,则必须使用动态内存