IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C语言学习之指针.day1 -> 正文阅读

[C++知识库]C语言学习之指针.day1

学完C语言的 数据类型,顺序,分支,循环结构,数组等内容,已经能够实现一些小程序的编写了,但如何简化程序,成为一个C语言进阶者?

?必须理解和熟练指针的使用。

1.通过指针变量访问整型变量。

#include<stdio.h>
int main()
{
   int a=100,b=10;
   int *pointer_1,*pointer_2;
   //2个指向整型数据指针
   pointer_1=&a;
   pointer_2=&b;
   printf("a=%d,b=%d\n",a,b);
   printf("*point_1=%d,*point_2=%d\n",*pointer_1,*pointer_2);
   //输出a,b的地址
   return 0;
}

2.输入a和b两个整数,按先大后小的顺序输出a和b。

#include<stdio.h>
int main()
{
// 输入a和b两个整数,按先大后小的顺序输出a和b。
   int *p1,*p2,*p;
   int a,b;
   printf("请输入两个整数:\n");

   scanf("%d%d",&a,&b);
   p1=&a;//p1指向变量a
   p2=&b;//p2指向变量b
   if(a<b)
   {//p1与p2指向的变量交换
      p=p1;
      p1=p2;
      p2=p;
   }
   printf("a=%d,b=%d\n",a,b);//输出a,b
   printf("max=%d,min=%d",*p1,*p2);//输出p1,p2指向的值
   return 0;
}

3.输入的两个整数按大小顺序输出。现用函数处理,而且用指针类型的数据作函数参数。

#include<stdio.h>
int main()
{
  void swap(int *x,int *y);//函数声明
  int a,b;
  int *p1,*p2;//定义两个整型指针变量
  printf("请输入a和b:\n");
  scanf("%d%d",&a,&b);

   p1=&a;//p1指向变量a
   p2=&b;//p2指向变量b
   if(a<b)
   swap(p1,p2);//进行函数调用,如果a<b,交换
   //a=*p1,b=*p2
   printf("max=%d\tmin=%d\n",a,b);
   printf("max=%d\tmin=%d\n",*p1,*p2);

   //p1=&a p2=&b
   printf("%d\t%d\n",p1,p2);
   printf("%d\t%d\n",&a,&b);
   return 0;
}
void swap(int *x,int *y)//函数定义
{
   int t;      //交换地址
   t=*x;
   *x=*y;
   *y=t;
}

4.输入3个整数a,b,c,要求按由大到小的顺序将它们输出。用函数实现。(与题3相同方法)

#include<stdio.h>
int main()
{
  //输入3个整数a,b,c,要求按由大到小的顺序将它们输出。用函数实现。
  int a,b,c;
  int *p1,*p2,*p3;
  printf("请输入3个整数:\n");
  scanf("%d%d%d",&a,&b,&c);//输入3个数
  p1=&a;  //定义3个整型指针变量,指向a,b,c
  p2=&b;
  p3=&c;
  void max3(int *x,int *y,int *z);//函数声明
  max3(p1,p2,p3);//函数调用
  printf("由大到小排序:%d %d %d\n",a,b,c);
   //打印结果
  return 0;
}

 void max3(int *x,int *y,int *z)//函数定义
{
   void swap(int *m,int *n);//swap函数声明
   if(*x<*y)swap(x,z);//调用
   if(*x<*z)swap(x,z);
   if(*y<*z)swap(y,z);

}
 void swap(int *m,int *n)//swap函数定义
 {
   if(*m<*n)
   {
      int s;
      s=*m;
      *m=*n;
      *n=s;
   }

 }

5.有一个整型数组a,有10个元素,要求输出数组中的全部元素。
? ?3种方式输出,用指针速度快

#include<stdio.h>
int main()
{
   int a[10];
	int i;
	int *p=a;//p指针指向a数组首地址
	printf("please enter 10 integer numbers:\n");
	for(i=0;i<10;i++)
	scanf("%d",&a[i]);//输入10个数
	for(i=0;i<10;i++)
      printf("%d\t",a[i]);
      printf("\n");
      //数组元素用数组名和下标表示
   for(i=0;i<10;i++)
      printf("%d\t",*(a+i));
      printf("\n");
      //通过数组名和元素序号计算元素地址找到该元素
   for(p=a;p<(a+10);p++)
	printf("%d\t",*p);
	//用指针指向当前的数组元素
	return 0;
 }

6.将数组a中n个整数按相反顺序存放。

#include<stdio.h>
int main()
{
  //将数组a中n个整数按相反顺序存放。
  void inv(int x[],int n);//函数声明
  int i;
  int a[10]={3,7,9,11,0,6,7,5,4,2};
  printf("The original array:\n");
  for(i=0;i<10;i++)
  printf("%3d",a[i]);//打印原数组
  printf("\n");

  inv(a,10);//函数调用
  printf("The array has been inverted:\n");
  for(i=0;i<10;i++)
  printf("%3d",a[i]);//输出改变后的数组
 }

 void inv(int x[],int n)//函数定义
 {
    int temp,i,j;
    int m=(n-1)/2;
    for(i=0;i<=m;i++)//i:前5个 j:后5个 前后对调
    {
       j=n-1-i;
       temp=x[i];
       x[i]=x[j];
       x[j]=temp;
    }
 }

7.练习用指针变量作实参

#include<stdio.h>
int main()
{
  //将数组a中n个整数按相反顺序存放。
  //用指针变量作实参
  void inv(int *x,int n);//函数声明
  int i,*arr;
  printf("The original array:\n");
  for(i=0;i<10;i++)
   scanf("%2d",arr+i);//未给arr指针指向一个内存地址,编译器会警告
  printf("\n");

  inv(arr,10);//函数调用
  printf("The array has been inverted:\n");
  for(i=0;i<10;i++)
   printf("%2d",*(arr+i));
  printf("\n");
  return 0;
 }

 void inv(int *x,int n)//函数定义
 {
    int *p,*i,*j;
    int m,temp;
    m=(n-1)/2;
    i=x;//i指向x指针
    j=x+n-1;//j指向 与x指针相隔n-1的地址
    p=x+m;//p指向   与x指针相隔m的地址
    for(;i<=p;i++,j--)
    //i指针指向的地址变化到p指针指向的地址  首尾互换
    {
       temp=*i;
       *i=*j;
       *j=temp;
    }
 }

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-14 13:50:50  更:2021-08-14 13:51:34 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/20 11:52:26-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码