指针的基础应用(数组的颠倒和排序,二维数组的表示)

简介: 指针的基础应用(数组的颠倒和排序,二维数组的表示)

1.数组的颠倒:若有10个数字,那么数组的颠倒即


a[0]与a[9]交换,a[1]与a[8]交换,a[2]与a[7]交换,......a[4]与a[5]交换,所以到a[4]就颠倒完毕,即


(n-1)/2


若不用指针代码如下


#include<stdio.h>
void fun(int s[],int n)
{
  int i,temp,m=(n-1)/2;
  for(i=0;i<=m;i++)
  {
  int j=n-1-i;
  temp=s[i];
  s[i]=s[j];
  s[j]=temp;
  }
  return;
}
int main()
{
  int s[10]={1,2,3,4,5,6,7,8,9,10}; 
  fun(s,10);
  for(int i=0;i<10;i++)
  {
 
  printf("%d\n",s[i]);
  }
  return 0;
}


若使用指针,则指针变量的位置如图所示



#include<stdio.h>
void fun(int *x,int n)
{
  int *p,*i,*j,temp,m=(n-1)/2;
  i=x;
  p=x+m;
  j=x+n-1;
  for(;i<=p;i++,j--)
  {
  temp=*i;
  *i=*j;
  *j=temp;
  }
  return;
}
int main()
{
  int s[]={1,2,3,4,5,6,7,8,9,10};
  fun(s,10);
  for(int i=0;i<10;i++)
  {
  printf("%d\n",s[i]);
  }
  return 0;
}


2.数组的排序,代码如下


#include<stdio.h>
#include<string.h>
void fun(int *x,int n)//void fun(x[],int n)
{
  int i,j,temp;
  for(i=0;i<n-1;i++)
  {
  for(j=i+1;j<n;j++)
  {
    if(*(x+i)<*(x+j))    //(x[i]<x[j])
    {
    temp=*(x+i);
    *(x+i)=*(x+j);
    *(x+j)=temp;
    }
  }
  }
  return;
}
/*也可以写为
int t;
for(int i=0;i<n-1;i++)
{
    k=i;
    for(int j=0;j<n;j++)
    {
        if(*(x+i)>*(x+k))    k=j;
            if(k!=i)
                {t=*(x+i);*(x+i)=*(x+k),*(x+k)=t;}
    }
}
效果相同
*/
int main()
{
  int a[10]={1,2,3,4,5,6,7,8,9,10};
  fun(a,10); 
  for(int i=0;i<10;i++)
  {
  printf("%d\n",a[i]);
  }
  return 0;
}


3.二维数组的表示


查找有一门以上课程不及格的学生,输出他们的全部课程的成绩


代码如下


#include<stdio.h>
void search(float(*p)[4],int n)//p指向包含4个float型元素的一维数组的指针变量
{
  int i,j,flag;
  for(j=0;j<n;j++)
  {
  flag=0;
  for(i=0;i<4;i++)
  {
    if(*(*(p+j)+i)<60)
    flag=1;
  }
  if(flag==1)
  {
    printf("第%d名学生有一门及以上的成绩不及格,他的成绩是:\n",j+1);
    for(i=0;i<4;i++)
    printf("%5.1f ",*(*(p+j)+i));//score[j][i]
    printf("\n");
  }
  }
}
int main()
{
  float score[3][4]={{65,57,70,60},{58,87,90,81},{90,99,100,98}};
  search(score,3);
  return 0;
}

结果显示


目录
相关文章
|
3月前
|
存储 程序员 编译器
C 语言数组与指针的深度剖析与应用
在C语言中,数组与指针是核心概念,二者既独立又紧密相连。数组是在连续内存中存储相同类型数据的结构,而指针则存储内存地址,二者结合可在数据处理、函数传参等方面发挥巨大作用。掌握它们的特性和关系,对于优化程序性能、灵活处理数据结构至关重要。
|
3月前
|
自然语言处理 前端开发 JavaScript
深入理解前端中的 “this” 指针:从基础概念到复杂应用
本文全面解析前端开发中“this”指针的运用,从基本概念入手,逐步探讨其在不同场景下的表现与应用技巧,帮助开发者深入理解并灵活掌握“this”的使用。
|
3月前
|
存储 C语言 计算机视觉
在C语言中指针数组和数组指针在动态内存分配中的应用
在C语言中,指针数组和数组指针均可用于动态内存分配。指针数组是数组的每个元素都是指针,可用于指向多个动态分配的内存块;数组指针则指向一个数组,可动态分配和管理大型数据结构。两者结合使用,灵活高效地管理内存。
|
3月前
|
容器
在使用指针数组进行动态内存分配时,如何避免内存泄漏
在使用指针数组进行动态内存分配时,避免内存泄漏的关键在于确保每个分配的内存块都能被正确释放。具体做法包括:1. 分配后立即检查是否成功;2. 使用完成后及时释放内存;3. 避免重复释放同一内存地址;4. 尽量使用智能指针或容器类管理内存。
|
3月前
|
存储 NoSQL 编译器
C 语言中指针数组与数组指针的辨析与应用
在C语言中,指针数组和数组指针是两个容易混淆但用途不同的概念。指针数组是一个数组,其元素是指针类型;而数组指针是指向数组的指针。两者在声明、使用及内存布局上各有特点,正确理解它们有助于更高效地编程。
|
3月前
|
存储 C语言
C语言如何使用结构体和指针来操作动态分配的内存
在C语言中,通过定义结构体并使用指向该结构体的指针,可以对动态分配的内存进行操作。首先利用 `malloc` 或 `calloc` 分配内存,然后通过指针访问和修改结构体成员,最后用 `free` 释放内存,实现资源的有效管理。
276 13
|
8月前
|
C语言
指针进阶(C语言终)
指针进阶(C语言终)
|
4月前
|
C语言
无头链表二级指针方式实现(C语言描述)
本文介绍了如何在C语言中使用二级指针实现无头链表,并提供了创建节点、插入、删除、查找、销毁链表等操作的函数实现,以及一个示例程序来演示这些操作。
56 0
|
5月前
|
存储 人工智能 C语言
C语言程序设计核心详解 第八章 指针超详细讲解_指针变量_二维数组指针_指向字符串指针
本文详细讲解了C语言中的指针,包括指针变量的定义与引用、指向数组及字符串的指针变量等。首先介绍了指针变量的基本概念和定义格式,随后通过多个示例展示了如何使用指针变量来操作普通变量、数组和字符串。文章还深入探讨了指向函数的指针变量以及指针数组的概念,并解释了空指针的意义和使用场景。通过丰富的代码示例和图形化展示,帮助读者更好地理解和掌握C语言中的指针知识。
204 4
|
6月前
|
C语言
【C初阶——指针5】鹏哥C语言系列文章,基本语法知识全面讲解——指针(5)
【C初阶——指针5】鹏哥C语言系列文章,基本语法知识全面讲解——指针(5)

热门文章

最新文章