C语言第2题:指针和数组的关系

可以看到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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值