1.地址与指针的概念
指针是用来穿地址的变量,即指针变量,是一种数据类型
指针运算符是二级运算符,结合方向自右向左
2.指针的工作原理
(1)通过指针变量中的值到内存空间中定位
(2)从定位处开始向后偏移sizeof基类型
(3)将偏移好的那部分内存空间当作是一个基类型变量来看
指针可以通过取地址符&与变量关联,如 p = &a;(假设a是一个整型变量)
直接访问: i= 100;
间接访问:int i =10;
int *p;
p = &i;
*p = 100;
用途:在被调函数中修改主调函数(使用数组时可以修改主调本质也是指针)
3.指针与数组结合的应用
遍历数组中的元素
#include <stdio.h>
void printfarray(int *a,int len)
{
int i;
for(i =0;i<len;++i)
{
printf("%d\n",*(a+i));
}
}
选择冒泡插入三种排序
#include<stdio.h>
void choicesort(int *a,int len)
{
int i,j;
for(i =0;i<len -1;++i)
{
for(j=i+1;j<len;++j)
{
if(*(a+i)>*(a+j))
{
swap(a+i,a+j);
}
}
}
}
void bubblesort(int *a,int len)
{
int i,j;
for(j = len -1;j>0;--j)
{
for(i=1;i<j;++i)
{
if(*(a+i) >*(a+i+1))
{
swap(a+i,a+i+1);
}
}
}
}
void insersort(int *a,int len)
{
int i,j;
for(i =1;i<len;++i)
{
int t = *(a+i);
j = i;
while(j>0 && *(a+j-1)>t)
{
*(a+j) = *(a+j-1);
--j;
}
*(a+j)=t;
}
}
二分法查找
#include<stdio.h>
int *binaryfind(int *a,int len,int n)
{
int begin =0;
int end = len -1;
int mid;
while(begin <= end)
{
mid =(begin + end) /2;
if(*(a+mid)>n)
{
end = mid - 1;
}
else if(*(a+mid)<n)
{
begin = mid + 1;
}
else
{
return mid + a;
}
}
return NULL;
}
4.使用时的注意事项
数组越界:访问数组时要注意不要超出其定义的范围。
指针解引用:确保指针指向有效的内存地址后再进行解引用操作,避免出现疯指针,野指针的情况导致程序崩溃。