通用指针数组|C入门问题



我第一次学习编程,从C开始,学习一本德语编程书。不幸的是,动态内存管理部分的页面有点短,解释得很快,这就是为什么我相处得不太好的原因。

我的阵列有多大

Int的大小,但我定义了array[0]和array[1],我能走多远?

当时我曾短暂地尝试过Python,在那里我知道像my_Array[1][2]这样的数组,因此我可以单独输出每一个东西,并了解它在哪里。不幸的是,我现在没有想到这一点。

现在,如果我在数组[1]中放入数字3,然后放入数字4。

这里的数字是如何存储的

它们存放在哪里

如何从数组[1]中检索每个数字

如果我执行realloc(array,array[0]+1(,0字段将以何种方式从该数组展开

在我看来,数组是一维的,以便将数字排列如下:

array[0]={..,3,4,5,…}

array[1]={..,3,4,5,…}

并且该命令始终只在该数组的末尾提供一个位置。

我现在刚从解决方案中获取代码。

提前谢谢!

#include <stdio.h>
#include <stdlib.h>
int main()
{
int value;

int *array = malloc(sizeof(int));
array[0] = 0;
int i = 1;

while (value >= 0)
{
printf("Enter a positive number to add a nubmern");
printf("Or enter a negative number to end.n");
printf("Enter number: ");
scanf("%i",&value);
if (value >= 0)
{
array = realloc (array, array[0] + 1);
array[i] = value;
i++;
array[0]++;
}
for (int i = i; i <= array[0]; i++)
{
printf("Value %i: %in", array[i]);
}
}
free(array);
return 0;```

对于初学者来说,程序具有未定义的行为,至少因为您在while循环的条件下使用了未初始化的变量value

int value;
//...
while (value >= 0)

你应该写例如

int value = 0;
//...
while (value >= 0)

或者,与其使用while循环,不如使用do-while循环。

其次,最初数组[0]的值等于0,而变量i等于1

array[0] = 0;
int i = 1;

所以这个代码片段

array = realloc (array, array[0] + 1);
array[i] = value;

再次调用未定义的行为,因为您只为一个字节分配了内存。所以这个声明

array[i] = value;

正在尝试访问超出分配内存的内存。

注意realloc调用中使用的表达式的值

array[0] + 1

等于1,2,3。。。,n而不是CCD_ 3。

并且不存在阵列array[0]和阵列array[1]。它们是类型为int的标量对象。要访问数组的元素,请使用类似array[i]的下标运算符,其中i小于存储在元素array[0]中的值。这就是for循环必须看起来像

for (int i = i; i < array[0]; i++)
^^^^^^^^^^^

同样在打印的调用中

printf("Value %i: %in", array[i]);

使用了两个转换说明符,而只为它们提供了一个参数。

例如,程序可以按照以下方式查找

#include <stdio.h>
#include <stdlib.h>
int main( void ) 
{
int *array = malloc( sizeof( int ) );
if ( array != NULL )
{
array[0] = 1;
int value;

do
{
printf( "Enter a positive number to add a nubmern" );
printf( "Or enter a negative number to end.n" );
printf( "Enter number: " );
if ( scanf( "%d", &value ) == 1 && value >= 0 )
{
int *tmp = realloc( array, ( array[0] + 1 ) * sizeof( int ) );
if ( tmp != NULL )
{
array = tmp;
array[array[0]++] = value;
}
else
{
value = -1;
}
for ( int i = i; i < array[0]; i++ )
{
printf( "Value %i: %in", i, array[i] );
}
}
else
{
value = -1;
}
} while ( value >= 0 );
}
free( array );    
}

相关内容

  • 没有找到相关文章

最新更新