数组概念
就是一堆数的一个集合,包含于指针,但是与指针不同的是数组是开辟了空间的
char a[20] //开辟了20个空间
char *p //一个指针,并没有开辟空间
-
数组名作为指针:
- 在C语言中,数组名通常可以被看作是一个指向数组首元素的指针。例如,如果你有一个数组
int arr[10];
,那么表达式arr
可以被看作是指向arr[0]
的指针。
- 在C语言中,数组名通常可以被看作是一个指向数组首元素的指针。例如,如果你有一个数组
-
指针算术:
- 你可以对指针进行算术操作,如增加或减少指针的值,使其指向数组中的其他元素。例如,如果
int *p = arr;
,那么p + 1
将指向arr[1]
。
- 你可以对指针进行算术操作,如增加或减少指针的值,使其指向数组中的其他元素。例如,如果
数组有什么独有的特征?
1、这些数都是连在一起的,相当于在一个内存空间内,把数组里面的东西按顺序放到了一起
2、数组可以有多维度的,比较难理解,每个一维数组可以理解为一个向量
3、数组写入、打印数据要通过循环遍历
……
好了,说完了好处就是缺点了
1、连续的,所以插入、删除数组里一个元素非常不容易,所以就创造出了链表
2、大量占用内存栈
3、循环写入、写出数据
4、只能一个一个的遍历修改数据,所以后来就出现了结构体
5、需要定义长度,且长度不能是变量(C就是老登,C++和python就可以)
……
顺序查找
直接上题
本关任务:数组中已存互不相同的10个整数,从键盘输入一个整数,输出与该值相同的数组元素下标。
答案:
#include<stdio.h>
#define N 10
int main()
{
int i,x,t,a[10]={63,72,24,91,35,12,49,107,57,84};
scanf("%d",&x);
/********** Begin **********/
for(i=0;i<N;i++)
{
if(a[i] == x)
{
printf("查找成功,%d的下标:%d",a[i],i);
break;
}
}
if(i == N)
{
printf("查找失败");
}
/********** End **********/
return 0;
}
这里面有一些小技巧
1、定义N在前面,这样可以方便修改数组长度
2、在循环里面没有办法打印查找失败,要不然就会发现查找成功也会弹出查找失败,要不就是一直弹出查找失败,看似标点法也不管用, 这是就要用循环是否发生截止来判断。
这种技巧依赖于这样一个事实:如果循环是因为找到了元素而提前退出的,那么i的值将不会达到N
;只有当循环遍历了所有元素而没有找到匹配项时,i
才会等于N
。因此,通过检查i
是否等于N
,可以判断查找是否失败。
也是一个老油条办法,一定要见过
总结
今天看了看数组的一些性质,还有一些办法,最重要的是另一种判断思路,即判断循环是否提前结束。以上均是本人理解,如有不对欢迎补充~
放个天子