1.升序数组中查找插入位置
while (i < n && x > a[i])
{
i++;
}
pos = i;
2.指针和数组
p是指针变量,可通过赋值操作改变它的值,使p指向数组中的其他元素,而数组名a是指针常量,代表一个地址常量,其值是不可改变的。
表达式a + i代表数组中下标为i的元素a[i]的地址,即&a[i];
scanf("%d", a+i);
*(a + i)
表示取出首地址元素后第i个元素的内容,即下标为i的元素a[i]。
printf("%4d", *(a+i))
数组元素之所以能通过这种方法来引用,是因为数组的下标运算符[]实际上就是以指针作为其操作数的。例如a[i]被编译器解释为表达式*(a + i)
即表示引用数组首地址所指元素后面的第i个元素。
可以通过移动指针变量p来引用数组元素。
由于增1运算的执行效率很高,所以利用指针的增1运算实现指针的移动,省去了每寻址一个数组元素都要进行的指针算数运算。
3.p++和p+1
虽然二者都对指针变量p进行加1运算,但p+1并不改变当前指针的指向,p仍然指向原来的元素, 而p++相当于执行p=p+1,因此p++操作改变了指针p的指向,表示将指针向量p向前移动了一个元素位置,即指向了下一个元素。此外,p++并非简单加1,而是加上1*sizeof(基类型)个字节。