Linux自学day10--指针一

 一、

 这段代码的主要目的是展示如何获取并输出不同类型变量在内存中的地址。

这是运行结果:

 这些地址是由计算机在运行程序时为变量分配的内存位置。

二、

 这段代码实现了简单的整数四则运算,通过指针操作变量,并使用scanf获取用户输入,printf输出运算结果。

1. 变量定义

  • int *p = NULL;:定义一个整型指针p,并初始化为NULL,表示指针当前不指向任何有效的内存地址。
  • int *q = NULL;:定义一个整型指针q,并初始化为NULL,与p类似。

2. 指针赋值

  • p = &Num1;:将指针p指向变量Num1的地址,这样通过*p就可以访问和操作Num1的值。
  • q = &Num2;:将指针q指向变量Num2的地址,同理通过*q可以操作Num2的值。

3. 输入数据

  • scanf("%d%d",p,q);:使用scanf函数从标准输入(通常是键盘)读取两个整数,分别存储到pq所指向的内存地址,即Num1Num2

三、

 这段代码展示了 指针的基本用法,通过指针可以在函数中修改实参的值,实现了两个整数的交换功能。

1. swap函数

  • 功能:用于交换两个整数的值。
  • 参数
    • int *px:指向第一个整数的指针。
    • int *py:指向第二个整数的指针。
  • 实现过程
    • 定义一个临时变量tmp,初始化为 0。
    • px所指向的值(即第一个整数)赋给tmp
    • py所指向的值(即第二个整数)赋给px所指向的变量。
    • 最后将tmp的值赋给py所指向的变量,从而实现了两个整数的交换。

四、

 这段代码通过两个嵌套的循环分别计算最大公约数和最小公倍数,利用指针将结果返回并输出。

1. GetCom函数

  • 函数定义int GetCom(int Num1,int Num2,int *pDivNum,int *PMulNum),该函数接收两个整数Num1Num2,以及两个指针pDivNumPMulNum,用于返回最大公约数和最小公倍数。
  • 变量初始化
    • int MaxNum = 0;:用于存储Num1Num2中的较大值。
    • int MinNum = 0;:用于存储Num1Num2中的较小值。
    • int n = 0;:循环变量。
  • 确定较小值和较大值
    • MinNum = Num1 < Num2 ? Num1 : Num2;:通过三目运算符确定Num1Num2中的较小值,并赋值给MinNum
    • MaxNum = Num1 > Num2 ? Num1 : Num2;:同理确定较大值并赋值给MaxNum
  • 计算最大公约数
    • for(n = MinNum;n > 0;n--):从较小值开始递减循环。
    • if(0 == Num1 % n && 0 == Num2 % n):判断n是否能同时整除Num1Num2,如果可以,说明n是公约数,通过break跳出循环,此时n就是最大公约数。
    • *pDivNum = n;:将最大公约数通过指针pDivNum返回。
  • 计算最小公倍数
    • for(n = MaxNum;n <= Num1 * Num2;n++):从较大值开始递增循环,直到达到Num1Num2的乘积。
    • if(0 == n % Num1 && 0 == n % Num2):判断n是否能同时被Num1Num2整除,如果可以,说明n是公倍数,通过break跳出循环,此时n就是最小公倍数。
    • *PMulNum = n;:将最小公倍数通过指针PMulNum返回。
    • return 0;:函数正常返回。

五、

 这段代码通过一系列的打印操作,展示了数组和指针在内存中的地址关系以及如何通过指针和数组下标来访问数组元素的值,

1. 代码结构和主要变量

  • int *p = NULL;:定义了一个整型指针p,并初始化为NULL,表示指针当前不指向任何有效的内存地址。

2. 指针与数组的关联

  • p = a;:将指针p指向数组a的首地址。在 C 语言中,数组名本身就代表数组的首地址,所以这里pa都指向了数组a的起始位置。

3. 打印数组元素的地址

  • printf("&a[0] = %p\n",&a[0]);:打印数组a的第一个元素a[0]的地址。
  • 同理,&a[1]&a[2]等分别打印数组a中第二个、第三个等元素的地址。
  • printf("a = %p\n",a);:再次打印数组a的首地址,与&a[0]的值相同。
  • printf("a+1 = %p\n",a+1);:这里a+1表示数组a首地址向后移动一个int类型的长度,即指向a[1]的地址,依次类推a+2等。

4. 打印数组元素的值

  • printf("*a = %d\n",*a);*a表示解引用指针a(此时a指向数组a的首地址),获取a[0]的值并打印。
  • printf("*(a+1) = %d\n",*(a+1));*(a+1)表示解引用a+1所指向的地址,即获取a[1]的值并打印,同理*(a+2)等。
  • printf("*p = %d\n",*p);:因为p也指向数组a的首地址,所以*p获取a[0]的值并打印。
  • printf("*(p+1) = %d\n",*(p+1));*(p+1)获取a[1]的值并打印,依次类推。

5. 通过指针下标访问数组元素

  • printf("p[0] = %d\n",p[0]);指针可以像数组一样通过下标访问所指向的内存区域中的元素,这里p[0]等价于*p,即获取a[0]的值并打印。
  • printf("p[1] = %d\n",p[1]);p[1]等价于*(p + 1),获取a[1]的值并打印。

六、

这段代码展示了处理整数数组的基本操作,包括输入、排序和输出, 

1. OutputArray函数

  • 功能:用于输出数组中的元素。
  • 代码分析
    • 函数接受一个整数指针parray(指向数组的首地址)和数组长度len作为参数。
    • 通过for循环遍历数组,使用printf函数输出每个元素,元素之间用空格分隔,最后输出一个换行符。

2. SoftArray函数

  • 功能:实现冒泡排序算法,对数组进行升序排序。
  • 代码分析
    • 函数接受一个整数指针parray和数组长度len作为参数。
    • 使用两层for循环,外层循环控制排序的轮数,内层循环用于每一轮比较相邻元素并交换位置(如果前一个元素大于后一个元素)。通过不断交换,将最大的元素逐步 “冒泡” 到数组末尾。

3. InputArray函数

  • 功能:用于输入数组元素。
  • 代码分析
    • 函数接受一个整数指针parray和数组长度len作为参数。
    • 通过for循环,使用scanf函数依次读取用户输入的整数,并存储到数组中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值