指针
指针是一个是一个变量,其值是另一个变量的内存地址。简单来说,指针“指向”数据的存储位置。通过使用指针,程序员可以直接访问和操作内存,这在很多情况下可以提高程序的效率和灵活性。
在C语言中,你可以声明一个指针变量,例如,如果你想要一个指向整型数据的指针,你可以这样声明:
int *ptr;
这里,*ptr 表示ptr是一个指针,而int是基类型,表示ptr将指向一个整型数据的地址。
当你需要让这个指针指向一个具体的整型变量时,你可以这样做:
int num = 10; // 声明一个整型变量
ptr = # // 让ptr指向num的地址
这里,&num 是取地址操作符,它返回num变量的内存地址。
你可以通过指针来访问或修改它所指向的变量的值:
printf("%d\n", *ptr); // 输出num的值,即10
*num = 20; // 修改num的值为20
注意,访问未初始化的指针或野指针,可能会导致程序崩溃
int *p;
*p = 20; //指针未进行初始化,直接进行赋值可能会导致程序崩溃
int i;
int *p = &i;
i = 100; //直接访问
*p = 200; //间接访问
1.通过指针变量中的值到内存空间中定位
2.从定位处开始向后偏移sizeof(类型)
3.将偏移好的那部分内存空间当作是一个基类型变量来看
数组与指针
数组名作为地址:一维数组的名称在大多数表达式中会被自动转换为指向数组第一个元素的指针。例如,如果有一个声明为 int arr[10] 的数组,表达式 arr 的值就是 arr[0] 的地址。
int a[] = {1,2,3,4,5,6,7,8,9};
int *p;
p = a; //因为a为数组首元素地址,所以可直接将a赋值给p
指针算术:由于数组在内存中是连续存放的,您可以通过指针算术来访问数组的其他元素。例如,arr[i] 等价于 *(arr + i),其中 i 是索引。同样,arr + 1 指向数组的第二个元素。
数组作为函数参数:当一维数组作为参数传递给函数时,实际上传递的是数组首元素的地址。因此,函数参数可以声明为数组类型,但在函数内部,这个参数会被当作指针来处理。
void array(int *a,len)
遍历数组
void printArray(int *a,int len)
{
int i;
for(i = 0;i < len ;++i)
{
printf("%d,",*(a+i));
}
printf("\b \n");
}
交换
void swap(int *a,int *b)
{
int t;
t = *a;
*a = *b;
*b = t;
}
选择排序
oid 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(i = len - 1;i >= 0;--i)
{
for(j = 0;j < i;++j)
{
if(*(a + j) > *(a + j + 1))
{
swap(a + j,a + j + 1);
}
}
}
}
插入法排序
void insertionSort(int *a,int len) //插入
{
int i,j,t;
for(i = 1;i < len;++i)
{
t = *(a + i);
j = i;
while(j >0 && *(a + j - 1) > t)
{
*(a + j) = *(a + j - 1);
--j;
}
*(a + j) = t;
}
}