HackerRank - C语言5 - 指针题 Pointers in C(代码参考)
这个是指针很好的科普文 指针。分为五种维度。
简单理解,每个变量不仅有表面上的值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;
}
指针是挺绕的,我也是初学。或许我也有讲错的地方。请斧正。继续加油学习!
上一篇: 如何用css把图片弄成背景
下一篇: PHP学习之查找两个链表的第一个公共结点