4月从零学习C语言(第19天)——指针与数组

指针与数组

如果我们通过函数的值把数组传到函数里面去了,那么这个函数接收到的是什么呢?我们之前试验过将普通变量传入到函数当中去得到的是变量的值,如果我们传入的是指针得到的是地址,那么我们将数组传到函数中得到的就是这个数组本身,我们来做个试验:

#include <stdio.h>

void f(int a[]);
 
int main( )
{
  int a[] = {0,1,2,3,4,5,6,7,8,9};
  int min,max;
  printf("main sizeof(a)=%lu\n",sizeof(a));
  printf("main a=%p\n",a);
  f(a);
  
  
  return 0;
}

void f(int a[]){
  printf("f sizeof(a)=%lu\n",sizeof(a));
  printf("f a=%p\n",a);
  
}

运行结果:
在这里插入图片描述
在上面的代码中我们看到了我们把数组当作值传到函数f后得到数组的地址和main函数当中的数组地址一模一样,这也证明了我们把数组当作值传递给函数时得到的是其本身。

那么我们知道了地址一样之后如果我们在f函数中修改一下数组的值会发生什么?

#include <stdio.h>

void f(int a[]);
 
int main( )
{
  int a[] = {0,1,2,3,4,5,6,7,8,9};
  printf("main sizeof(a)=%lu\n",sizeof(a));
  f(a);
  printf("a[0]=%d\n",a[0]);
  
  return 0;
}

void f(int a[]){
  printf("f sizeof(a)=%lu\n",sizeof(a));
  printf("f a=%p\n",a);
  a[0]=100;
}

运行结果:
在这里插入图片描述
这个时候我们可以发现我们的a[0]发生了变化变成了100。所以实际上这里的这个数组就是指针。那么函数参数表里面的数组我们之所以写成[],是因为它是一个指针。

传入函数的数组成了什么?

函数参数表中的数组实际上是指针

sizeof(a)== sizeof(int*)

但是可以用数组的运算符[]进行运算

数组参数

以下四种函数原型是等价的:

  • 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]
#include <stdio.h>
 
int main( )
{
  int a=0;
  int *p=&a;

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

}

运行结果:在这里插入图片描述
在上面我们可以看到我们完全使用数组来打印变量的值。

***运算符可以对指针做,也可以对数组做: **

  • *a= 25;
#include <stdio.h>
 
int main( )
{
  int a[] = {0,1,2,3,4,5,6,7,8,9};

  printf("*a=%d\n",*a);
  printf("a[0]=%d\n",a[0]);
  return 0;

}

运行结果:在这里插入图片描述
在上面我们可以看到我们完全使用指针来打印数组的第一个值。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值