一.结构体声明
结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。
描述复杂对象。
结构体成员可以是标量、数组、指针、结构体。
定义和初始化:
struct peo
{
char namer[20];
char tele[12];
char sex[5];
int high;
};
struct peo
{
char namer[20];
char tele[12];
char sex[5];
int high;
}p1,p2;//p1,p2是创建的变量
void print(struct peo *p1)
{
printf("%s %s %s %d\n",p1->name,p1->tele, p1->sex,p1->high);
}
void pri(struct peo p1)
{
printf("%s %s %s %d\n", p1.name, p1.tele, p1.sex, p1.high);
}
int main()
{
struct peo p1 = {"张三","15066296762","男",181};
printf("%s %s %s %d\n", p1.name,p1.tele,p1.sex,p1.high);
print(&p1);
pri(p1);
return 0;
}
二.结构体传参
传指针节省空间 穿内容需要copy一份
函数传参的时候,参数是需要压栈的,
如果传递一个结构体对象的时候,结构体过大,参数压栈的系统开销比较大,所以会导致性能的下降。结构体传参的时候,要传结构体的地址。
三.练习
1.下面哪个是位操作符:(A)
A.&
B .&&
C.||
D.|
2.下面代码的结果是:()
#include <stdio.h>
int main()
{
int a, b, c;
a =5;
c=++a;
b=++c,c++,++a,a++;//逗号表达式,=优先级大于,
b+= a++ +c;
printf("a=%d b=%d c=%d\n:",a, b, c);
return 0;
}
a=9 b=23 c=8
3.//写一个函数返回参数二进制中1的个数
第一种方法
int sum_1(unsigned int n)
{
int count = 0;
while (n)
{
if (n % 2 == 1)
{
count++;
}
n /=2;
}
return count;
}
int main()
{
int n = 0;
scanf("%d",&n);
int sum=sum_1(n);
printf("%d",sum);
return 0;
}
第二种方法
第三种方法
n=n&(n-1)每运行一次可以去掉n最右边的0
n=15 1111
n-1=14 1110
n=1110
int sum_1( int n)
{
int count = 0;
while (n)
{
n = n & (n - 1);
count++;
}
return count;
}
//判断一个数是不是2的n次方,化成二进制只有一个一
n&(n-1)==0则为2的n次方
4.求两个数二进制中不同位的个数
编程实现:两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?
输入例子:
1999 2299
输出例子:7
int count_diff_bit(int m,int n)
{
int count = 0;
int i = 0;
for (i = 0; i < 32; i++)
{
if ((m >> i & 1) != (n >> i & 1))
{
count++;
}
}
return count;
}
int main()
{
int m = 0;
int n = 0;
scanf("%d %d",&m,&n);
int ret = count_diff_bit(m,n);
printf("%d",ret);
return 0;
}
第二种方法
int count_diff_bit(int m,int n)
{
int count = 0;
int ret = m ^ n;//相同为0,相异为1
while (ret)
{
ret = ret & (ret - 1);
count++;
}
return count;
}
5.打整数二进制的奇数位和偶数位
int main()
{
int i = 0;
int n = 0;
scanf("%d",&n);
for (i = 30; i >= 0; i -= 2)
{
printf("%d",n>>i&1);
}
for (i = 31; i >= 0; i -= 2)
{
printf("%d", n >> i & 1);
}
return 0;
}
6. D
7.<
全局变量、静态变量不初始化的时候默认值是0;
局部变量是随机值
sizeof返回的结果是size_t类型的,是无符号整型;相当于非常大的整数