在给定的代码中,有一种方法
for(i = pos - 1 ; i < size -1 ; i++)
{
a[i] = a[i+1] ;
}
,但假设大小为4,我想删除数组的第4个位置值。 在此场景中,我无法理解此代码的工作方式。
答案 0 :(得分:1)
似乎您不太了解C中的数组。
在C语言中,数组是相同类型且因此大小相同的项的连续序列。
系统最初将为阵列分配空间。
例如,当您说int a[4]
并运行函数时,a
的类型为“ int
的数组”,则每个条目的类型都是'int'。
通常,一个int值需要4个字节的空间。 [4]
意味着将分配四个int的空间。也就是说,它将在您的内存中分配4 * 4 = 16字节。
例如,下面是a
分配的空间:
01010101 first byte (start of a[0])
01111110 second byte
00101001 third byte
00000111 fourth byte
01100000 fifth byte (start of a[1])
.....
.....
.....
01010101 16th byte
虽然刚刚分配了字节数,但未知。您可以为其初始化或为其赋值。
好的,那么当您使用a
做某事时,您可以说a[1]
访问由5个字节到8个字节的4个字节表示的int。
如果您说a[10]
会怎样?
该空间未由您的程序分配!访问它是一个错误。但是只有当您幸运时,可能会显示一个错误提示窗口,显示“内存0x6463a80发生访问冲突(数字只是示例)”,否则您将得到一个未知值而没有明显警告,那就更糟了!
根据您的问题,我知道您想说的是
“哦,天哪,我最初有int a[4]
,但是在代码后面,我想将其缩小为int a[3]
之类的东西!”
解决方案是:只需忽略a[3]
,就可以查看它不存在!永远不要使用a[3]
那就可以了!
如果您想完全访问“添加”,“插入”,“删除”等操作,则不适合使用数组。考虑使用C ++。它具有std库,并且有Vector类型。它不是数组,它的工作原理与此不同。搜索Google或与我聊天,如果您想知道。
您可能不完全理解我在这里所说的话,但请随时提问。我几乎与您同在一条船上,我愿意教您并为您提供帮助。