做网站的技术,注册保险代理公司需要什么条件,无锡网站建设 君通科技,什么是软件开发技术常见的指针指针运算说明1.指针与整数的加减运算对指针可以进行加法运算#xff0c;即p n或者p - n。其结果依旧是一个是一个指针#xff0c;新的指针是在原来的地址值基础上加上/减去n *(sizeof(指针指向的数据类型)#xff09;个字节。示例#xff1a;#includestdio.…常见的指针指针运算说明1.指针与整数的加减运算 对指针可以进行加法运算即p n或者p - n。其结果依旧是一个是一个指针新的指针是在原来的地址值基础上加上/减去n *(sizeof(指针指向的数据类型)个字节。示例
#includestdio.hint main(void)
{int a[] {1,2,3,4,5};int *p a; //p指向a[0]printf(%d\n,*P); //输出结果为1p; //因为int占4个字节所以地址值sizeof(int)4个字节printf(%d\n,*p); //输出结果为2return 0;
}2. 指针与指针之间的减法运算 指针和指针之间可以进行减法运算但是要保证两种(指针指向的数据类型)一致并且必须指向同一数组结果为(p1地址 - p2地址) / sizeof(指针类型)即元素个数差。示例
#includestdio.hint main(void)
{int a[] {1,2,3,4,5};int *p1 a;int *p2 a[4];printf(%d\n,p2 - p1);return 0;
}3. 指针与指针之间的关系运算 指针和指针之间可以进行关系运算但是要保证两种(指针指向的数据类型)一致或者强制类型转换为同一类型并且必须指向同一数组。可使用的运算符、!、、、、。示例
#includestdio.hint main(void)
{int a[] {1,2,3,4,5};int *p1 a;int *p2 a;if(p1 p2){printf(%p%p\n,p1,p2);}p2;if(p1 p2){printf(%p%p\n,p1,p2);}return 0;
}注意事项 指针和指针之间不能进行加法、乘法、除法等运算(编译会报错)。 只有指向同一数组的指针减法和关系运算才有意义否则结果未定义。 指针与整数的加减结果仍为指针指向新的位置需确保不越界访问。指针算法练习 1 使用不同算法打印数组
#includestdio.hvoid printArray(int *begin,int *end) //遍历打印
{while(begin end){printf(%d ,begin);begin;}
}void printArray1(int *begin,int *end) //递归调用打印数组
{if(begin end){return ;}else{printf(%d ,begin);printArray1(begin 1,end);}
}int main(void)
{int a[] {1,2,4,3,5,7,6,8,9,10};int len sizeof(a) / sizeof(*a);printArray(a, a len - 1);printArray1(a,a len - 1)return 0;}
2.使用不同算法逆序数组
#includestdio.hvoid swap(int *a,int *b) //互换
{int t;t *a;*a *b;*b t;
}void reserve(int *begin,int *end)
{while(begin end){swap(begin,end);begin;--end;}
}void reserve1(int *begin,int *end)
{if(begin end){return ;}else{swap(begin,end);reserve1(begin 1,end - 1);}
}int main(void)
{int a[] {1,2,4,3,5,7,6,8,9,10};int len sizeof(a) / sizeof(*a);reverse(a, a len -1);reverse1(a, a len -1);printArray(a,a len - 1);return 0;
}快速排序 快速排序是一种高效的排序算法基于“分治法”思想通过选取一个基准元素将数组分为两部分小于基准和大于基准再递归排序两部分。其平均时间复杂度为O(n log n)是实际应用中常用的排序算法。快速排序的核心步骤 1. 选择基准pivot从数组中选一个元素作为基准通常选首元素、尾元素或中间元素。 2. 分区partition将数组中小于基准的元素放在基准左边大于基准的元素放在右边等于基准的元素可放任意一侧。 3. 递归排序对基准左右两侧的子数组重复上述步骤直到子数组长度为0或1。
#includestdio.hvoid printArray(int *begin,int *end) //遍历打印
{while(begin end){printf(%d ,begin);begin;}
}void qSort(int *begin,int *end) //快排
{ int *p begin;int *q end;int t *begin;if(begin end){return ;}else{while(p q){while(p q *q t){--q;}while(p q *p t){p;}swap(p, q);}swap(begin,p);qSort(begin,p - 1);qSort(p 1,end);}
} int main(void)
{int a[] {1,2,4,3,5,7,6,8,9,10};int len sizeof(a) / sizeof(*a);qSort(a,a len - 1);printArray(a,a len - 1);return 0;
}