当前位置:首页 » 编程语言 » c语言数组分配

c语言数组分配

发布时间: 2022-05-25 07:13:22

c语言定义数组时一定要分配空间么

是的,c中数组定义时要指定大小。
当然,万事也不是绝对的。例如:1.作为形参的时候,可以不指定,因为在函数调用的时候,数组会转为指针的。2.当为字符串数组时,char
st[]="hello
word"这儿定义了一个st字符数值,不需要你自己去指定大小,系统会自动生成长度为11.

② C语言如何动态分配二维数组

动态分配二维数组:

void main(int argc, char * argv[])

{

int NC=100, NR=200;

int i,j;

char **a; // a[NR][NC] -- *a[NR] -- a[j][i]

a = (char **) malloc(sizeof(char *) * NR);

for (j=0;j<NR;j++){

a[j] = (char *) malloc(sizeof(char) * NC);

}

// 释放空间: free(a);

编译错误是因为p[j]=(char *)malloc,而不是题目的(char *)malloc(n*sizeof(char))。

(2)c语言数组分配扩展阅读:

二维数组的动态分配

二维数组A[m][n],这是一个m行,n列的二维数组。设a[p][q]为A的第一个元素,即二维数组的行下标从p到m+p,列下标从q到n+q,按“行优先顺序”存储时则元素a[i][j]的地址计算为:

LOC(a[i][j]) = LOC(a[p][q]) + ((i − p) * n + (j − q)) * t

按“列优先顺序”存储时,地址计算为:

LOC(a[i][j]) = LOC(a[p][q]) + ((j − q) * m + (i − p)) * t

存放该数组至少需要的单元数为(m-p+1) * (n-q+1) * t 个字节。

③ C语言中怎么动态分配数组

//---------------------------------------------------------------------------

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

int main(void)
{
int *a=NULL;
int i;
a=malloc(sizeof(int)*10);/*动态创建一个有10个int元素的数组*/

if (a==NULL) { /*a==NULL表示空间分配失败*/
fprintf(stderr,"MEMORY ERROR");
return -1;
}

for (i = 0; i < 10; i++) {
a[i]=i; /*对数组进行操作*/
}

free(a);/*动态分配的空间需要用free()函数释放*/
return 0;
}
//---------------------------------------------------------------------------

④ C语言数组定义地址分配问题

使用C语言编程,实际上使用的内存只有一种——虚拟内存。根据功能的不同在C语言中又将虚拟内存为分三类:栈区、堆区、静态数据区,无论单一变量还是数组,其内存分配都是如此。其中,栈区、静态数据区、堆区都会有编译器负责分配、操作系统负责管理,程序员可以在堆区使用malloc()来动态分配堆内存。

1、栈区:一般每一个函数对应一个栈区,在编译原理中称为栈帧。比如下面的代码:
int main()
{
//定义一个有20个int元素的数组。此时数组a分配的虚拟内存称为栈区,有编译器自行分配。
int a[20] = {0};
return 0;
}

2、静态数据区:这实际上对应于生成的可执行文件的.data区段,因为这个区段在生成的可执行文件中,因此是“静态的”。比如下面的代码:
//定义一个20个int元素的全局数组,此时数组分配的虚拟内存称为静态数据区,有编译器自行分配。
int g_a[20];
int main() { return 0;}

3、堆区:堆区是最复杂的,有操作系统负责堆管理,但是当用C语言编译器生成一个可执行文件并且运行时,它会默认建立一些堆。拿Windows来说,每一程序运行,它会建立至少两个堆,一个是默认堆,一个是new堆。比如下面的代码:
int main()
{
int *pa = (int*)malloc(sizeof(int)*20);//分配20个int元素大小的堆空间。
return 0;
}

⑤ 怎么实现C语言里面数组的动态分配

1 定义指针。
2 使用malloc函数分配内存。
3 对数组进行访问即可。

对于一维动态数组,直接定义一维指针,并分配内存空间即可。
比如int类型的10个元素动态数组,写作
int *a;
a = (int *)malloc(sizeof(int) * 10);

如果是多维数组,需要从高维向低维逐层分配。如二维数组10*100空间。
int **a;
int i;
a = (int **) malloc(sizeof(int *) * 10); // 先分配10个int*的空间。
for(i = 0; i < 100; i ++)
a[i] = (int *)malloc(sizeof(int) * 100); // 对于每个int*,分配100个元素的空间。

⑥ C语言中结构体数组的大小如何动态分配

结构体类型数据组就和我们平常定义的基本类型的数组一样,只不过是类型变了。
基本类型数组动态分配大小:
int* a = (int*)malloc(sizeof(int)*10) ; //动态分配10个大小的int类型的内存空间
结构体类型数组分配大小:
struct DIYDEFINE
{
int a;
char ch;
long lnum;
};

DIYDEFINE* pDiy = (DIYDEFINE*)malloc(sizeof(DIYDEFINE)*10); //动态分配10个大小的结构体类型DIYDEFINE的内存空间。

⑦ c语言数组在内存中是怎么分配的

C语言中内存为分三类:栈区、堆区、静态数据区。

局部变量在栈上分配,函数调用前的栈指针,要和函数返回后的栈指针一样,否则就会出错。

void test(void)

{

char i,a[10];

printf("0x%x", &i);

printf("0x%x", a);

printf("0x%x", a+1);

printf("0x%x", a+2);

printf("0x%x", a+3);

}

(7)c语言数组分配扩展阅读

c语言数组在内存分配

示例:

#include<stdio.h>

int main()

{

int a[4] = {11,12,13,14};

int b[4] = {21,22,23,24};

int *pa = &a;

int i = 0;

while(i<8)

{

i++;

printf("now *p value = %d and",*pa);

printf("p addr value = %d ",pa);

pa++;

}

return 0;

}

⑧ C语言数组指针的内存分配问题

s是数组名,对数组名改变数值是错误的语句!
s=(char*)malloc(sizeof(char)*1000);
这是错误的!
s[0]=(char*)malloc(sizeof(char)*1000);
//这才是分配s[0]

⑨ C语言二维数组内存是怎么分配的

二维数组在内存中其实是一个平坦的一维数组,下面具体说明:
int
arr[3][5]

int
arr[15]
所使用的内存区大小是一样的,都是15*sizeof(int)个字节。
如果你做下面这样一个定义:
union{
int
a[3][5];
int
b[15];
}U;
你会发现
U.a
=
&U.b
U.a[0]
==
&U.b[0]
U.a[1]
==
&U.b[5]
U.a[2]
==
&U.b[10]
&U.a[2][3]
==
&U.b[13]
规律是:
&U.a[m][n]
==
&U.b[m*5+n],其中5就是数组a的第二维度。
实际上,二维数组在运行时也是用这样的公式转化为对一维数组的访问。

⑩ c语言动态分配内存和数组分配各有什么优缺点

动态分配内存,按需要分配空间,不浪费空间。缺点是不能像数组顺序访问,数组的迭代器加一就可以访问下一个元素,访问方便,而且前者注意要释放内存。数组分配在编译前必须指定数组大小,而动态分配则很灵活。

热点内容
高级语言都有与之对应的编译程序或解释程序 发布:2025-02-13 00:54:46 浏览:570
塞班java 发布:2025-02-13 00:48:27 浏览:157
java策略设计模式 发布:2025-02-13 00:43:35 浏览:867
c语言二码表 发布:2025-02-13 00:37:46 浏览:235
免费加密文件 发布:2025-02-13 00:35:00 浏览:176
菲亚特菲翔怎么区别配置 发布:2025-02-13 00:21:19 浏览:985
服务器好坏重点看什么 发布:2025-02-13 00:19:47 浏览:587
php把数据插入数据库 发布:2025-02-13 00:09:48 浏览:369
eclipse查看jar包源码 发布:2025-02-12 23:59:35 浏览:973
电脑主机服务器维修 发布:2025-02-12 23:59:26 浏览:302