如何减小阵列的大小? #包括 #包括 #包括 void main() { int i=0,位置; int*ptr; clrsc(); ptr=(int*)malloc(10*sizeof(int)); printf(“输入10个元素:\n”); 而(i

如何减小阵列的大小? #包括 #包括 #包括 void main() { int i=0,位置; int*ptr; clrsc(); ptr=(int*)malloc(10*sizeof(int)); printf(“输入10个元素:\n”); 而(i,c,arrays,dynamic,C,Arrays,Dynamic,C)不允许这样做。因此,另一种方法是动态分配一个数组,放入所需的内容,然后在获得所需大小时,将该数据传输到新分配的适当大小的数组中,并删除旧数组。使用变量跟踪数组中有多少元素正在使用 开始时: #include<stdio.h> #include<conio.h> #include<stdlib.h> void main() { int i=0,pos; int *ptr; clrscr(); ptr=(int *)malloc

C)不允许这样做。因此,另一种方法是动态分配一个数组,放入所需的内容,然后在获得所需大小时,将该数据传输到新分配的适当大小的数组中,并删除旧数组。

使用变量跟踪数组中有多少元素正在使用

开始时:

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
void main()
{
    int i=0,pos;
    int *ptr;
    clrscr();
    ptr=(int *)malloc(10*sizeof(int));
    printf("Enter 10 Elements:\n");
    while(i<10)
    {
        scanf("%d",&ptr[i]);
        i++;
    }

    printf("Current Array:\n");
    for(i=0;i<10;i++)
    {
        printf("%d\t",ptr[i]);
    }
    printf("Enter the position to be deleted:");
    scanf("%d",&pos);
    for(i=pos;i<10;i++)
    {
        ptr[pos-1]=ptr[pos];
       pos++;
    }
    for(i=0;i<10;i++)
    {
        printf("%d\t",ptr[i]);
    }
    getch();
}
删除时,还应执行以下操作:

unsigned num_elements = 10;
int *ptr = malloc(num_elements * sizeof(int));
打印时:

--num_elements;

for(unsigned i=0;i您的问题在这里涉及两个问题:

  • 删除动态分配数组的元素
  • 打印动态分配数组的值,而无需调整循环参数的
  • (一)

    至(2)

    简单回答:这是不可能的。当你减小数组的大小并且不调整循环的参数时,你将访问不再属于数组的内存

    当然,您不想手动调整每个for循环,但如果您始终记住数组的大小,最好是在
    结构中直接引用数组,则可以简化操作:

    for (i = pos; i < array_size - 1; i++)
    {
       ptr[i] = ptr[i+1];
    }
    
    ptr = realloc(ptr, --array_size)
    
    如果确保每次分配阵列内存时都正确调整
    大小
    (函数是您的朋友),则始终可以使用以下内容打印值:

    typedef struct
    {
       size_t size;
       int *array;
    } my_array_t;
    
    my_array_t a;
    a、 尺寸=10;
    a、 数组=malloc(a.size*sizeof(int));
    对于(i=0;i
    为什么不想减小到循环大小?可以将当前大小保存在一个变量中,因为删除元素时,当前大小应减小一。C没有“空”的概念元素。如果你想知道一个数组中只有8个元素可以容纳10个元素是有效的,你必须自己在另一个变量中跟踪该信息。使用一个变量来表示数组中的项数而不是硬编码有什么反对意见?如果数组中使用了9个元素,为什么要坚持迭代到
    10
    ?在运行时使用动态分配是没有意义的,它的大小是在编译时硬编码的。您能告诉我这个类mystring{private:char*c;int lnth,capacity;public:mystring();~mystring();bool append(char x);};我们现在已经声明c是指向char的指针,并且添加了一个新变量capacity来跟踪数组的当前长度。
    for(i=pos;i<10;i++)
    {
       ptr[pos-1]=ptr[pos];
       pos++;
    }
    
    for (i = pos; i < array_size - 1; i++)
    {
       ptr[i] = ptr[i+1];
    }
    
    ptr = realloc(ptr, --array_size)
    
    typedef struct
    {
       size_t size;
       int *array;
    } my_array_t;
    
    my_array_t a;
    a.size = 10;
    a.array = malloc(a.size * sizeof(int));
    
    for (i=0; i < a.size; i++)
       // ...