1.结构体的普通传参指针传参
结构体做函数参数有三种传递方式
- 传递结构体变量,这是值传递。
- 传递结构体指针,这是地址传递。
- 传递结构体成员,这也分为值传递和地址传递。
下面来看一个代码就了解一些这两种传递:
#include<stdio.h>
struct per
{
char name[20];
char tele[20];
char sex[7];
int age;
};
下面这个是在使用结构体时时可以像函数一样嵌套的
struct class
{
//数据结构嵌套
struct per p1;
int c_lauguage_score;
double high;
};
void print(struct class p1)
{
以下标注的就是值传递,就是直接把值给穿递给printf来打印,打印找值时记住需要使用操作符.号
printf("%s %s %s %d %d %lf\n", p1.p1.name, p1.p1.tele, p1.p1.sex, p1.p1.age, p1.c_lauguage_score, p1.high);
}
void prin(struct class* p1)
{
以下标注的就是地址传递,通过把指针符给函数,通过指针找到源头,把指针传给printf,打印,打印时需要使用操作符->号
//什么地方用指针就用->操作符寻找地址打印
printf("%s %s %s %d %d %lf\n", p1->p1.name, p1->p1.tele, p1->p1.sex, p1->p1.age, p1->c_lauguage_score, p1->high);
}
int main()
{
struct class p1 = { {"tonny","15522314433","male",18},100,165.5};
这里就是典型的值传递
printf("%s %s %s %d %d %lf\n", p1.p1.name, p1.p1.tele, p1.p1.sex, p1.p1.age, p1.c_lauguage_score, p1.high);
print(p1);
prin(&p1);
return 0;
}
不需要担心值传递和地址传递有什么区别,接下来小编给你们截图看一下,结果:

2.之前讲了操作符,来看一下操作符的题吧!
用操作符去计算二进制里1的个数
#include<stdio.h>
用最简单的方法计算一下
int main()
{
int n = 3;
//00000000000000000000000000000011
int n = 0;
scanf("%d", &n);
int count = 0;
while (n)
{
if ((n & 1) == 1)
{
count++;
}
n = (n >> 1);
}
printf("%d\n", count);
return 0;
}
使用算法升级一下难度吧
//用算法来计算二进制中1的个数
//记住需要无符号整型,要不然负数无法计算正确
int count_s(unsigned int n)
{
int count = 0;
//原理n%几就能得到几进制的数
//数学里十进制得到二进制(几进制都一样)就除二取余逆序列
//这里原理就是模二除二逆序排列(几进制都一样)
//11%2 == 1 - - -上
//11/2 =5 |
//5%2 == 1 |
//5/2 =2 |
//2%2 == 0 |
//2/2 =1 |
//1%2 == 1 |-> 下
//1/2 =0
while (n)
{
if ((n % 2) == 1)
{
count++;
}
n /= 2;
}
return count;
}
int main()
{
int n = 0;
scanf("%d", &n);
int n_n = count_s(n);
printf("%d\n", n_n);
return 0;
}

最低0.47元/天 解锁文章
995

被折叠的 条评论
为什么被折叠?



