首页 > 其他分享 >指针和数组

指针和数组

时间:2024-06-10 09:03:47浏览次数:19  
标签:arr int 312 数组 include 指针

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

#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)解引用
    }

}

标签:arr,int,312,数组,include,指针
From: https://blog.csdn.net/2301_77634163/article/details/139569813

相关文章

  • 【华为OD】D卷真题100分:数组拼接 JavaScript代码实现[思路+代码]
    【华为OD】2024年C、D卷真题集:最新的真题集题库C/C++/Java/python/JavaScript【华为OD】2024年C、D卷真题集:最新的真题集题库C/C++/Java/python/JavaScript-CSDN博客JS、Java、C、C++、python代码实现:【华为OD】D卷真题100分:数组拼接JavaScript代码实现[思路+代码]-CSDN......
  • 请编写函数fun,它的功能是:求出1到100之内能被7或者11整除,但不能同时被7和11整除的所有
    //请编写函数fun,它的功能是:求出1到100之内能被7或者11整除,但不能同时被7和11整除的所有整数,并将他们放在a所指的数组中,通过n返回这些数的个数。#include<stdio.h>intfun(int*a){intresult[100];intcount=0;for(inti=1;i<=100;i++){......
  • 【C语言从入门到入土】第四章数组
    第四章数组———————-数组的引入你所有的压力,都是因为你太想要了,你所有的痛苦,都是因为你太较真了。有些事不能尽你意,就是在提醒你改转弯了。如果事事都如意,那就不叫生活了,珍惜所有不期而遇,看淡所有的不辞而别。文章目录第四章数组4.1如何定义一个数组1.相同......
  • 【三级指针、二级指针、一级指针、指针值】原理+超直白说明/总结(当然,还是会有点涩~)
    看不懂的原理及区别在计算机编程中,指针是一个变量,其值为另一个变量的地址。指针的级别是根据它们所指向的对象类型来定义的。当我们谈论“一级指针”、“二级指针”和“三级指针”时,我们实际上是在讨论指针所指向的对象的类型。1.一级指针一级指针(或称为普通指针)是最常......
  • 深入理解指针(三)
    一、指针运算1.1指针+-整数下面我们来看一个指针加整数的例子:#include<stdio.h>intmain(){   intarr[10]={1,2,3,4,5,6,7,8,9,10};   int*p=&arr[0];   inti=0;   intsz=sizeof(arr)/sizeof(arr[0]);   for(i=0;i<sz;i......
  • LeetCode 算法:除自身以外数组的乘积c++
    原题链接......
  • python-数据分析-Numpy-3、数组的运算
    数组的运算使用NumPy最为方便的是当需要对数组元素进行运算时,不用编写循环代码遍历每个元素,所有的运算都会自动的矢量化。简单的说就是,NumPy中的数学运算和数学函数会自动作用于数组中的每个成员。#-*-coding:utf-8-*-#数组的运算#使用NumPy最为方便的是当需要对数组......
  • Fortran入门(四)期末复习|数组
    一:字符数据处理1:字符关系字符比较是按ASCII码值的大小进行比较的。排列的基本规则是:空格字符最小,数字比字母小,大写字母比小写字母小。字符型数据比较遵循:(1)单个字符按ASCII比较(2)两个相同长度的字符串的比较是将字符串的字符从左到右逐个比较,以第一对不同字符的比较结果为准......
  • 二维数组1
    第1题    对角线II    时限:1s空间:256m输入整数 N ,输出相应方阵。输入格式一个整数 N 。( 0<N<10)输出格式一个方阵,每个数字的场宽为 3 。输入/输出例子1输入:5输出:  0 0 0 0 1  0 0 0 1 0  0 0......
  • 二维数组2(第2~5题是Goc语言,其余是C++语言)
    第1题    对角线    时限:1s空间:256m输入整数N,输出相应方阵。输入格式一个整数N。(0<n<10)输出格式一个方阵,每个数字的场宽为3。输入/输出例子1输入:5输出: 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 ......