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