首页 > 其他分享 >指针练习

指针练习

时间:2023-02-10 20:36:06浏览次数:39  
标签:max min int double 练习 数组 printf 指针

指针练习

一:a的相关信息

#include <stdio.h>
int main(void)
{
    int a[4][2]={ {2,4},{6,8},{1,3},{5,7} }; 
printf("a=%p , a+1=%p\n",a,a+1);//两个int 
printf("a[0]=%p , a[0]+1=%p\n",a[0],a[0]+1);//一个int 
printf("*a=%p , *a+1=%p\n",*a,*a+1);// a[0]和 *a 完全相同 
printf("a[0][0]=%d\n",a[0][0]);
printf("*a[0]=%d\n",*a[0]);
printf("**a=%d\n",**a);
printf("a[2][1]=%d\n",a[2][1]);
printf("*(*(a+2)+1)=%d\n",*(*(a+2)+1)); // *(*(a+2)+1)相当于a[2][1]

return 0;

}


// %p是指针的输出装换符

输出结果:

a=000000000062FE00 , a+1=000000000062FE08
a[0]=000000000062FE00 , a[0]+1=000000000062FE04
*a=000000000062FE00 , *a+1=000000000062FE04
a[0][0]=2
*a[0]=2
**a=2
a[2][1]=3
*(*(a+2)+1)=3
  1. 二维数组a的地址和一维数组a[0]的地址相同,都是各自首元素的地址

  1. a[0]指向一个4字节的数据对象,a[0]加1,其值加4(16进制中)。数组名是一个内含2个int类型的数组地址,所以a指向一个8字节的数据对象,因此a加1,它所指向的地址加8字节(16进制中)。

  2. a[0]和*a完全相同

  3. 数组地址,数组内容和指针之间的关系:

关系图

 

二:编写一个函数,返回存储在double类型数组中最大值和最小值的差值

#include<stdio.h>
double max_min(double arr[], int n);
int main(void)
{
    double a[5] = { 3.6,3.8,4.6,2.3,6.3 };
    printf("the diff is %1.1f\n", max_min(a, 5));
    return 0;
}
​
double  max_min(double arr[], int n)
{
    double max;
    double min;
    min = max =arr[0];
    int i;
    for ( i = 1; i < n; i++)
    {
        if(max<arr[i]) max=arr[i];
        if(min>arr[i]) min=arr[i];
    }
    return max-min;
}

 

三:把double的数组倒序排列

#include<stdio.h>
double r_sort(double arr[], int n);
int main(void)
{
    double a[5] = { 3.6,3.8,4.6,2.3,6.3 };
    int i;
    for(i=0;i<5;i++) printf("%g ",a[i]);// '%g'是根据值的不同,自动选择 %f 或者 %e(浮点数)。%e格式用于指数小于-4或者大于或等于精度时  
    printf("\n");
    r_sort(a,5);
    for(i=0;i<5;i++) printf("%g ",a[i]);
    return 0;
}
​
double  r_sort(double arr[], int n)
{
    double temp;
    int i,j;
    for(i=0;i<n-1;i++){
        for(j=0;j<n-1-i;j++){
            if(arr[j]<arr[j+1]){
                temp=arr[j];
                arr[j]=arr[j+1];
                arr[j+1]=temp;
            }
        }
    }
}
  1. 用的比较排序法,判断相邻元素的大小关系,并对需要排序的两个数组交换位置。内层循环一次能保证一个元素调整到合适位置,在n-1次外层循环中保证所有元素都到正确位置。

  2. 循环判断条件设置为 j<n-1 也可以,只是会多执行一些无效的循环判断。(具体原因是:每次循环可以保证1个元素到达正确位置 ,该位置后续排序过程可以忽略,以提高效率。

  3.  

标签:max,min,int,double,练习,数组,printf,指针
From: https://www.cnblogs.com/ninnne/p/17110204.html

相关文章

  • 【THM】Skynet-练习
    THM-Skynet-练习本文相关的TryHackMe实验房间链接:https://tryhackme.com/room/skynet通过学习相关知识点:攻破目标靶机并完成提权操作。部署并渗透目标机器step1使用Nm......
  • 【C++复习】第六章 数组、指针、字符串
    1、数组1.1基本数组数组声明inta[10];声明时方括号内是元素个数。下标从0开始。第一个元素是a[0],最后一个元素是a[9]a[n]表示的是第n+1个元素二维数组intb[3]......
  • java 接口返回空指针问题排查
    java接口返回空指针问题排查问题现象现象:业务流程都能通,数据也正常,就是接口返回【空指针异常】排查:postman接口调用测试,返回200PHP项目中调用接口,返回400空指针异常......
  • Go 语言指针
    Go语言指针Go语言中指针是很容易学习的,Go语言中使用指针可以更简单的执行一些任务。接下来让我们来一步步学习Go语言指针。我们都知道,变量是一种使用方便的占位符,......
  • js基础笔记学习204练习1
     ......
  • c++指针基础
    指针是一个变量,其存储的是值的地址,而不是值本身。如何找到常规变量的地址?只需对变量应用地址运算符(&),就可以获得它的位置;intdonuts=3;&donuts就是取donuts变量的地址。......
  • 【快速学】指针是什么?指针常量、常量指针是什么?(C++)
    0、先上总结指针是什么?指针是个数据类型,它里面存储的是个地址如inta=3;,定义了一个int类型的变量a,值为3,它在内存中的地址为&a同理,int*b=3;,定义了一个int*类型的变量b......
  • js基础笔记学习94-练习2
      ......
  • js基础笔记学习93-练习1
     变化......
  • 智能指针
    1、shared_ptr共享的智能指针1)shared_ptr使用引用计数,每一个shared_ptr的拷贝都指向相同的内存。在最后一个shared_ptr析构的时候,内存才会被释放。2)不能将一个原始指......