操作符,结构体的一些从浅到深的理解

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;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值