Arrays 指针数组分配
main()中的变量是何时分配的?特别是在以下情况下,为指向数组arr和2d的指针分配了多少内存:Arrays 指针数组分配,arrays,pointers,allocation,Arrays,Pointers,Allocation,main()中的变量是何时分配的?特别是在以下情况下,为指向数组arr和2d的指针分配了多少内存: int main() { float a, b; int *b; float *(arr)[6]; float *(2d)[5][5]; } 这些变量是自动的、全局的还是静态的?所有这些变量都是自动的:全局变量需要在函数范围之外声明;静态变量需要有一个static修饰符 具体大小取决于系统。您可以通过打印sizeof(arr),sizeof(b)等找到答案 自动变量分配的确切时间
int main()
{
float a, b;
int *b;
float *(arr)[6];
float *(2d)[5][5];
}
这些变量是自动的、全局的还是静态的?所有这些变量都是自动的:全局变量需要在函数范围之外声明;静态变量需要有一个
static
修饰符
具体大小取决于系统。您可以通过打印sizeof(arr)
,sizeof(b)
等找到答案
自动变量分配的确切时间取决于编译器:有些是在进入函数时分配的,有些是在进入使用它们的块时分配的,有些可能被优化掉,所有这些变量都是自动的:全局变量需要在函数范围之外声明;静态变量需要有一个
static
修饰符
具体大小取决于系统。您可以通过打印sizeof(arr)
,sizeof(b)
等找到答案
自动变量分配的确切时间取决于编译器:有些是在进入函数时分配的,有些是在进入使用它们的块时分配的,有些可能被优化掉,而根本没有分配。函数中声明的所有局部变量的内存将在运行时分配,在执行函数之前。对于每个函数,将在进程内存堆栈中创建一个激活记录,其中将包含所有局部变量。一旦功能执行完成,将弹出激活记录
函数内声明的所有变量仅被认为是<代码> Auto <代码>,除非它明确声明为“代码>静态<代码> >或<代码>登记< <代码>。在函数外部声明的变量将被视为全局变量
若变量在函数内部或外部声明为静态,则意味着内存分配将在编译时本身完成,编译时将位于数据段(或bss)中所有指针变量都将存储一些虚拟地址(任何类型或函数的变量)。因此,对于32位机器,指针变量的大小为4字节,对于64位机器,指针变量的大小为8字节。在执行函数之前,将在运行时为函数内声明的所有局部变量分配内存。对于每个函数,将在进程内存堆栈中创建一个激活记录,其中将包含所有局部变量。一旦功能执行完成,将弹出激活记录
函数内声明的所有变量仅被认为是<代码> Auto <代码>,除非它明确声明为“代码>静态<代码> >或<代码>登记< <代码>。在函数外部声明的变量将被视为全局变量
若变量在函数内部或外部声明为静态,则意味着内存分配将在编译时本身完成,编译时将位于数据段(或bss)中所有指针变量都将存储一些虚拟地址(任何类型或函数的变量)。因此,指针变量的大小在32位机器上为4字节,在64位机器上为8字节。标识符
2d
看起来无效,如果它是其他东西,可能以字母/下划线开头?标识符2d
看起来无效,如果它是其他东西,也许以字母/下划线开头?