#include<stdio.h>
#include<stdlib.h>
//-------静态数组---------
void main1()
{
//int a[1024 * 1024];//栈内容有限,报错,栈溢出
//int num = 100;
//int a[num];//在VC里是不行的GCC没问题,VC数组必须常量,GCC可以是变量,依然可能栈溢出
}
//增加 查找 删除 修改
int a[10];
int length = 10;
void main2()
{
//int a[100];//可以查询修改,但是删除很麻烦,数组是连续的,删除中间一个元素,后面的元素要往前填充
for (int i = 0; i < length; i++)
{
printf("%d\n", a[i] = i);//初始化数组并打印
}
int num = 3;//删除数组里的3
for (int i = 0; i < length; i++)//判定要删除的对象是不是最后一个,是的话直接长度-1
{
if (num == a[length - 1])
{
length -= 1;
}
else
{
for (int i = 0; i < length - 1; i++)
{
if (num == a[i])//这里已经实现了查询,修改,可以赋值给num
{
for (int j = i; j < length-1; j++)//删除第i个元素,后面的元素往前填充
{
a[j] = a[j + 1];
}
length = length - 1;//长度-1
break;
}
}
}
}
for (int i = 0; i < length; i++)
{
printf("%d\n", a[i]);//打印
}
//但是这种方式无法增加
system("pause");
}
void main3()
{
int a[10] = { 1,2,3,4,5,6,7,8,9,0 };
a[10] = 11;
a[11] = 12;//数组越界
//这种情况一般不会报错,但是如果这片内存被其他程序占用,就会报错
//这是属于偶然的成功,这样写会产生BUG
getchar();
}
void main()
{
int *p1 = (int*)malloc(sizeof(int) * 10);
int *p2 = (int*)calloc(10,sizeof(int));//calloc两个参数,第一个是元素个数,第二个是元素占多大
printf("%p,%p", p1, p2);
for (int i = 0; i < 10; i++)
{
p1[i] = i;
p2[i] = i;
}
getchar();
//插入断点查看结果:
//malloc只管分配,不初始化
//calloc会进行内存清零
}