欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

HackerRank - C语言5 - 指针题 Pointers in C(代码参考)

程序员文章站 2022-03-11 18:22:07
...

这个是指针很好的科普文 指针。分为五种维度。
简单理解,每个变量不仅有表面上的值12345678等等,背后也是有内存地址的。
定义指针变量,其实就是让指针变量 和 其他某变量 做 “捆绑” 然后实现一些方便功能。。
如下

int a;
int *pa = &a;

这样 指针变量本身有值pa,叫“己值”。
也有自己的内存地址&pa。叫“己址”。
指针变量的值pa,就是捆绑的那个变量a的地址。叫“他址”。
*pa也就是捆绑的那个变量a的值,叫“他值“。
int *pa 的int 是他值的类型,也就是捆绑的那个变量a的类型,也就是int a 的int,整数,叫“他型”。

先看题目的一部分

#include <stdio.h>

void update(int *a,int *b) {
    // Complete this function    
}

int main() {
    int a, b;
    int *pa = &a, *pb = &b;   
    
    scanf("%d %d", &a, &b);
    update(pa, pb);
    printf("%d\n%d", a, b);

    return 0;
}

给了后面的,要你补上前面的“指针”内容。

看看后面的
先是,定义了两个整数型变量ab
再声明了两个整数型指针变量pa和pb,分别和a、b变量的内存地址做了“捆绑”。

scanf读取你输入的ab值,传到变量ab

被题目要求的update“指针”这个函数进行处理pa、pb指针变量。
被函数处理完,按题目要求是实现相加功能和相减的绝对值功能。最后打印出来。

现在我们补上前面的。
题干所先写好的update里的int 星号a 这个a和b和题目后面的变量ab无关,可以换个其他的c和d,以免具有迷惑性。不换也可以。它是声明两个指针变量,用来传pa.pb。 update(pa,pb)papb俩,传进去函数后。
1 int x,y; 定义两个整数型变量。题目要求是a’,无所谓了,随便定义。
2 x = *a + *b; 星号a就是*pa,pa的“他值”也就是变量a的值,+上 ,pb的“他值“也就是b的值,最后赋给x
3 y = *a - *b; 同上,变成减法。
4 *a = x; 将x值赋给pa的“他值”,也就是最终的变量a打印的值。
5 *b =abs(y); 将y值赋给pb的“他值”,也就是最终变量b打印的值,abs是绝对值处理。

最终代码

#include <stdio.h>
#include <stdlib.h>
void update(int *a,int *b) {
    // Complete this function  
      int x,y;
    x = *a + *b;
    y = *a - *b;
    *a = x;
    *b =abs(y); 
}

int main() {
    int a, b;
    int *pa = &a, *pb = &b;
    
    scanf("%d %d", &a, &b);
    update(pa, pb);
    printf("%d\n%d", a, b);

    return 0;
}

指针是挺绕的,我也是初学。或许我也有讲错的地方。请斧正。继续加油学习!