数组与指针(笔记)

数组和指针的关系
函数参数表中的数组实际上是指针
sizeof(a) == sizeof(int*)
可以用数组的运算符[]进行运算

#include <stdio.h>
void minmax(int a[], int len, int *min, int *max);  //定义最大值和最小值函数

int main()
{
	int a[] = {1,2,3,4,5,6,7,8,9,12,13,14,15,16,17,21,25, }; 
	int min, max;
	printf("main sizeof(a)=%lu\n", sizeof(a));   //以无符号长整型输出主函数中的数组a的大小
	printf("main a=%p\n", a);
	minmax(a, sizeof(a)/sizeof(a[0]), &min, &max);
	printf("a[0]=%d\n", a[0]);
	printf("min=%d, max=%d\n", min, max);
	
	
	return 0;
}

void minmax(int a[], int len, int *min, int *max)//可等价写为void minmax(int *a, ……)
{
	int i;
	printf("minmax sizeof(a)=%lu\n", sizeof(a)); 输出传入函数中的数组a的大小
	printf("minmax a=%p\n", a);输出函数中的数组a的地址
	a[0] = 1000;
	*min = *max =a[0];
	for (i=1; i<len; i++)
	{
		if (a[i] < *min)
		{
			*min = a[i];
		}
		if (a[i] > *max)
		{
			*max = a[i];
		}
	}
}

四种函数原型等价
int sum(int *ar, int n);
int sum(int *, int);
int sum(int ar[], int n);
int sum(int [], int);
不是类型等价,在参数表中出现,作为函数原型是等价的

数组变量本身表达地址,所以
int a[10]; int *p=a;
数组的单元表达的是变量,需要用&取地址
a == &a[0]
[]运算符可以对数组做,也可以对指针做
p[0] <==> a[0]
继上方代码

int *p=&min;
printf("*p=%d\n", *p);
printf("p[0]=%d\n", p[0]);

输出数值相等
号可以对指针做,也可以对数组做
a = 25
上方a[],写成*a输出1000,可以读也可以写
实际上,数组是 const的指针

int b[] --> int * const b
b是一个常数,不能被改变,是一个常量指针

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值