c语言可变数组的实现 c语言数组名值可变吗?
c语言数组名值可变吗?
以前版本的C99没有。数组大小必须是常量或常量表达式。C99版本只添加了一个可变长度数组
我不会查看冒泡排序的算法部分,直接告诉您不知道错误的原因。你的第一种写作方式:int n=1,a[n],I=0,j=0,k=0。这里定义了n=1,在这一行中还定义了[n]。然后编译器将在这里直接为序列a分配内存。也就是说,确定阵列A的大小,即1。我不知道你是否学会了内存分配。我给你一个简短的解释。您可以在线搜索详细信息。例如,一个具有五种整数类型的数组可以定义为[5],但也可以按如下方式获得:int*a=(int*)malloc(sizeof(int)*5)也就是说,我们将内存分配给一个指针以获得一个数组。[5]的定义还要求编译器在编译程序时分配内存。编译器将根据您的代码优化您的程序,并将代码转换为汇编代码。另外,机器代码说得太多了。我将继续分析修改后的代码int n=1,I=0,j=0,K=0printf(“please input the length of the array:”)scanf(%d“,&n)int a[n];//此时,由于您在声明数组之前读入了n,因此a是根据您输入的数字确定的数组大小。你知道我的意思吗?
C语言,可变长数组?
指针自增自减
第四个空标题不清楚:
数组名代表它的第一个地址
数组名本身只有一个存储地址,所以第一个地址没有问题
要保存数组的第一个地址,您需要使用指向指针的指针
如果数组名是a
则键入**a=&A
数字组的大小不能用变量表示,因为编译和连接时必须根据您的系统控制内存设置数组的长度来分配相应的内存空间,如果它是一个变量,那么就没有办法分配它了,可以用符号常量来求解,首先用:
#define m 100
#define N 100,然后在程序中可以定义u[m][N]二维数组,当不一定是100时,可以是任意正整数。
在C语言中,所有变量空间在程序运行开始时应用于系统,包括和指针。它也需要空间,除了一些动态应用程序方法,如malloc函数。未经申请,不得在航天系统中进行读写操作。然后,如果数组的大小是一个变量定义,则在程序运行之前无法确定数组的大小,因此无法应用它,因此不允许这样做。解决方案如前所述,例如:int a[n
]可以更改为
int*const a=(int*)malloc(sizeof(int)*n)
,这样变量就可以直接用作数组,包括[1]。因为“[]”中的方括号运算符只偏移其中的地址数并取一个值。例如,
a[1
]相当于
*(a 1)
,星号后的常量修饰符表示指针声明后不能更改,即只能指向获取的空间,完全符合数组的性质。
如果必须直接,只需交换指针即可。例如:将LG数组复制到CHS数组:
long LG[20];
byte CHS[200];
CHS=(char*)&lg[0];
这是直接的。记住,一定要用指针。
其次,可以使用memcpy函数来解决问题。
函数原型为void*memcpy(void*目的地,void*源,无符号n)。该函数将源内存地址开头的几个字节复制到目标内存地址,即从源内存地址复制n个字节到目标内存地址。
希望对您有所帮助。
c语言可变数组的实现 c语言可变长数组 c语言如何定义可变长度数组
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。