C++怎么操作可以实现删除数组中的某几个元素
就是比如说我先前定义了一个大小为100的数组。然后经过一次操作后我想删除前10个元素。然后第十一的元素的下标就变为0了。这个可以实现吗?...
就是比如说我先前定义了一个大小为100的数组。然后经过一次操作后我想删除前10 个元素。然后第十一的元素的下标就变为0了。 这个可以实现吗?
展开
3个回答
展开全部
这么做本身逻辑上就有问题,
数组的下标与数组定义相关,定义好数组之后下标也就定了,比如char a[100],
其中的a[0]一直是a[0],而a[11]一直是a[11],
a[11]和你定义一个变量x一样可以看做是一个变量名,带着下标比较别扭而已,
如果用一个指针与之相关,比如 char *pa = &a[11]; 访问p[0]也就是访问原来的a[11]了。
这样是把下标当做指针的偏移地址使用了,需要注意使用非原始地址释放内存会出错。
#include <stdio.h>
#include <stdlib.h>
#define MAX_LENGTH 100
int main()
{
char a[MAX_LENGTH] = "0123456789abcdefgh";
int *b = (int *)malloc(MAX_LENGTH * sizeof(int));
int *pb = NULL;
int i = 0;
if (NULL == b)
{
printf("内存分配失败!\n");
return -1;
}
for (i = 0; i < MAX_LENGTH; i++)
{
b[i] = i;
}
printf("old value of b[12] : %d\n", b[12]);
pb = &b[11]; // 此时pb[0] 也就是 b[11]
pb[1] = 111; // b[12]置为111
printf("new value of b[12] : %d\n", b[12]);
//free(pb); // pb指向的不是malloc时的地址,程序挂掉
free(b); // 使用原始地址free内存
b = NULL;
return 0;
}
数组的下标与数组定义相关,定义好数组之后下标也就定了,比如char a[100],
其中的a[0]一直是a[0],而a[11]一直是a[11],
a[11]和你定义一个变量x一样可以看做是一个变量名,带着下标比较别扭而已,
如果用一个指针与之相关,比如 char *pa = &a[11]; 访问p[0]也就是访问原来的a[11]了。
这样是把下标当做指针的偏移地址使用了,需要注意使用非原始地址释放内存会出错。
#include <stdio.h>
#include <stdlib.h>
#define MAX_LENGTH 100
int main()
{
char a[MAX_LENGTH] = "0123456789abcdefgh";
int *b = (int *)malloc(MAX_LENGTH * sizeof(int));
int *pb = NULL;
int i = 0;
if (NULL == b)
{
printf("内存分配失败!\n");
return -1;
}
for (i = 0; i < MAX_LENGTH; i++)
{
b[i] = i;
}
printf("old value of b[12] : %d\n", b[12]);
pb = &b[11]; // 此时pb[0] 也就是 b[11]
pb[1] = 111; // b[12]置为111
printf("new value of b[12] : %d\n", b[12]);
//free(pb); // pb指向的不是malloc时的地址,程序挂掉
free(b); // 使用原始地址free内存
b = NULL;
return 0;
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
遍历一遍数组元素,
for(i=2;i<10;i++)
a[i]=a[i++];
for(i=0;i<9;i++)
printf("%d",a[i]);
就OK啦
只需把要被删除的后面每一位前移一位的就行!
for(i=2;i<10;i++)
a[i]=a[i++];
for(i=0;i<9;i++)
printf("%d",a[i]);
就OK啦
只需把要被删除的后面每一位前移一位的就行!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询