指针和数组

同一指针相减的绝对值得到的是之间元素的个数

#include"stdio.h"
#include"string.h"
int main()
{
    int arr[10]={0};
    printf("%d\n",&arr[9]- &arr[0]);
    return 0;
}

不同类型的指针减去指针没有意义

地址加地址,指针加指针没有意义

地址向后移,指针相比较,指针减减就是减去一个整数

简化

#include"stdio.h"
#include"string.h"
int main()
{
    int ss=5;
   float value3[ss];
   float *vp;
   for(vp=&value3[ss-1];vp>=&value3[0];vp--)
   {
        *vp=1;
   }
   for(int i=0;i<5;i++)
   {
   printf("%.f\n",value3[i]);
   }
    return 0;
}

虽然简化好,但是我们C语言要求是不允许这样写的,虽然大部分编译器是可以允许我这样写的

有3个指针,中间是一个数组arr,有个指针指向中间,其他两个指向两边,一个指向前面,一个人指向后面

我们C语言编译器中说指针允许往后比较大小,但不允许往前比面的指针比较大小

指针和数组

//数组:是一组相同类型元素的集合

//指针:指针就是地址

//指针变量:是一个变量,存放的是地址

数组大小取决他有多少个元素,取决于每个元素的类型

指针大小取决他处于什么操作系统是8字节还是4字节32位和64操作系统

数组名表示首元素的地址,但是有两种情况例外sizeof(数组名)和&(数组名)

sizeof当中指的是整个数组所占的内存大小(单位:字节)

&这里表示的数组名表示整个数组,取出的是整个数组的地址

通过数组的首元素的地址用指针访问大小

数组通过指针访问

#include"stdio.h"
#include"string.h"
int main()
{
    int arr[10]={0,122312,312,312,3,12,312,312,3};
    int sz=sizeof(arr)/sizeof(arr[0]);
    int *p=arr;
    for(int i=0;i<sz;i++)
    {
        printf("%d\n",*(p+i));
    }
    return 0;
}

数组和指针的地址是一样的,说明是可以的

#include"stdio.h"
#include"string.h"
int main()
{
    int arr[10]={0,122312,312,312,3,12,312,312,3};
    int sz=sizeof(arr)/sizeof(arr[0]);
    int *p=arr;
    for(int i=0;i<sz;i++)
    {
        printf("%p    %p\n",&arr[i],p+i);
    }
    return 0;
}

下面那个用数组名也是可以用的,因为他也表示一个地址,加1就会找后面那个元素的地址

用指针调用函数

#include"stdio.h"
#include"string.h"
void test(int  *pp,int ss);
int main()
{
    int arr[10]={0,122312,312,312,3,12,312,312,3};
    test(arr,10);
    return 0;
}
void test(int *pp,int ss)
{
    for(int i=0;i<ss;i++)
    {
        printf("%d\n",*(pp+i));
    }

}

用数组调用函数求出数组各个元素的值

#include"stdio.h"
#include"string.h"
void test(int arr[],int ss);
int main()
{
    int arr[10]={0,122312,312,312,3,12,312,312,3};
    test(arr,10);//这里传过去的是一个首元素地址
    return 0;
}
void test(int arr[],int ss)
{
    for(int i=0;i<ss;i++)
    {
        printf("%d\n",arr[i]);//这里其实编译器会算成*(arr+i)解引用
    }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值