1. 指针
声明:基类型*指针变量名
int *p;//int 是基类型,表示p 将指向一个整型数据的地址,可以为char型,double型
定义:指针是一种特殊的变量,用于存储内存地址,
赋值:指针可以通过取地址符&与变量关联,如 p = &a;(假设a是一个整型变量)。
访问未初始化的指针或野指针会导致程序崩溃;
#直接访问
int i = 100;
#间接访问
int i= 10;
int *p;
p = &i;
*p = 100;
指针 + 1:在原有的地址的基础上加基类型的字节
*p = NULL 空指针;
注意:
1.通过指针变量的值到内存空间中定位
2.从定位处开始向后偏移sizeof(基类型)个字节;
3.将偏移好的那部分内存空间当作是一个基类型变量来看
2. 数组与指针的关系
数组名在表达式中通常会被转换为指向数组首元素的指针。
可以通过指针访问数组元素,如 p[0] 或 *(p+0) 都表示数组的第一个元素。
指针算术:指针可以进行加减运算,p+1 表示指向下一个元素的指针。
3. 指针与数组的应用
遍历数组:使用指针可以方便地遍历数组,如 for(int *p = numbers; p < numbers + 10; p++)。
void printArray(int *a,int len)
{
if(len == 0)
{
return;
}
else
{
printf("%d\n",*a);
printArray(a + 1,len - 1);
return;
}
}
选择排序法(指针)
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 = 0;i < j;++i)
{
if(*(a + i)>*(a + i + 1))
{
swap(a + i ,a + i + 1);
}
}
}
}
插入排序法
void insertionSort(int *a,int len)
{
int i;
for(i = 1;i < len;++i)
{
int j;
int t = *(a + i);
j = i;
while(j > 0&&*(a + j -1)>t)
{
*(a + j) = *(a + j - 1);
--j;
}
*(a + j)=t;
}
}
4. 注意事项
数组越界:访问数组时要注意不要超出其定义的范围。
指针解引用:确保指针指向有效的内存地址后再进行解引用操作。
动态内存管理:使用动态分配的内存后,要及时释放,避免内存泄漏。