可以看到p/p1与p2相差为4
#include<stdio.h>
int main(void)
{
int buf[10];
int *p = buf;
int *p1 = &buf[0];
int *p2 = &buf[1];
printf("%d,%d,%d\n",p,p1,p2); //可以看到p/p1与p2相差为4
system("pause");
return 0;
}
#include<stdio.h>
int main(void)
{
int buf[10];
int *p = buf;
int *p1 = &buf[0];
int *p2 = &buf[1];
printf("%d,%d,%d\n",p,p1,p2); //可以看到p/p1与p2相差为4
p++;
printf("%d\n",p);//指针运算不是简单的整数加减法,而是指针指向的数据类型在内存中占用字节数
p += 3; //加的不仅仅是3,而是字节数加3*4 = 12,也就是相差12个
printf("%d\n", p);
// -------------------------
int *pp1 = &buf[0];
int *pp2 = &buf[2];
printf("%d\n",pp2-pp1);//两个指针相减可以得到两个数组元素的相对距离
system("pause");
return 0;
}
利用指针求出数组中最大的元素
先用数组实现
#include<stdio.h>
int max_res(int arr[10])
{
//for (int i = 0; i < 10;i++)
//printf("%d ",*p++);
int value = 0;
int i;
for (i = 0; i < 10; i++)
{
if (value < arr[i])
value = arr[i];
}
return value;
}
int main(void)
{
int buf[10] = {12,34,45,32,46,78,65,43,23,71};
int len = 0;
//int *p = buf;
//while (*p)
//{
// //printf("buf=%d",buf);
// p++;
//}
printf("before:");
for (int i = 0; i < 10;i++)
printf("%d ", buf[i]);
printf("\n");
printf("len = %d\n",len);
//int *p;
//p = buf;
//int max = 0;
//max = max_res(buf,len);
int max = 0;
max = max_res(buf);
printf("max=%d\n",max);
system("pause");
return 0;
}
数组逆序输出字符
void nixu(int arr[10])
{
int low = 0;
int high = 9;
while (low < high)
{
int temp = arr[low];
arr[low] = arr[high];
arr[high] = temp;
low++;
high--;
}
for (int i = 0; i < 10;i++)
printf("%d ",arr[i]);
}
求数组中第二大元素,要求不能排序后获得
子函数如下:
思路讲解: 定义一个max,一个smax
把s[0],s[1]中大的给max,小的给smax。
然后在进行比较,比较的时候需要注意,需要从s[2]开始,因为前面两个已经被使用了。
首先我们已经默认max大于smax了,所以后面的情况只有3种
1 后面的都比smax,max小
2 后面的最大的比max大
3 后面的最大的在smax和max中
因此,基于这些就可以进行判断了。
int smax(int s[])//求数组中第二大元素
{
int max = 0;
int smax = 0;
if (s[0] > s[1])
{
max = s[0];
smax = s[1];
}
else
{
smax = s[0];
max = s[1];
}//将max等于s[0],s[1]中那个元素的值
int i;
for (i = 2; i < 10; i++)
{
if (max < s[i])
{
smax = max;
max = s[i];
}
else if(max>s[i]&&s[i]>smax)
{
smax = s[i];
}
}
return smax;
}