指针、结构体

求一个数的二进制位中有几个1

int count_bit_one(int n)
{
    int count = 0;
    while(n)
    {
     n = n & (n-1);
     count++;
     }
  return count;
}

乘法口诀中的小细节
        %3d是C语言中格式化输出字符,代表的意思是指的输出3个字符长度的整数。可以在“%”和字母之间插进数字表示最大场宽。例如:%3d表示输出3位整型数,不够3位右对齐

结构体
       结构体是一些值的集合,这些值称为成员变量,结构体的每个成员可以是不同类型的变量。

结构体的声明
        struct    结构体关键字
         代码表示:

struct stu//结构体类型
{
	char name[20];
	short age;
	char tele[12];
	char sex[5];
}; s1, s2, s3;//结构体变量(全局)
int main()
{
	struct stu s;//(局部变量)
	return 0;
}

结构体声明第二种形式

typedef struct stu//typedef重新给stu起名
{
	char name[20];
	short age;
	char tele[12];
	char sex[5];
}st;//取名为st

结构体成员访问
1、通过点操作符(.)访问的
       例:stu.name
2、通过指针传参
       stu*   ps          ps->name

小便签
1、栈区的默认使用
       先使用高地址的空间,再使用低地址处的空间
2、数组随着下标的增长,地址是由低到高变化

const int*p = &num

const放在指针变量的*左边时修饰的是*p,也就是说:不能通过改变*p(num)的值,const放在指针变量的*右边时,修饰的是指针变量p本身,p不能被改变。

要将一个指针结构体赋值给另一个指针结构体,可以通过以下步骤进行: 1. 创建新的目标结构体指针。 2. 使用解引用运算符 `*`,将源结构体指针所指向的实际结构体复制到目标结构体中。 3. 如果结构体中包含动态分配的内存(如字符串指针等),需要进行适当的内存分配和复制。 以下是一个示例代码,假设有两个结构体类型为 `MyStruct` 的指针 `src` 和 `dest`: ```c #include <stdlib.h> #include <string.h> typedef struct { int value; char* text; } MyStruct; void copyStruct(MyStruct* dest, const MyStruct* src) { // 复制结构体中的基本数据类型成员 dest->value = src->value; // 复制结构体中的字符串指针成员 dest->text = malloc(strlen(src->text) + 1); strcpy(dest->text, src->text); } int main() { MyStruct* src = malloc(sizeof(MyStruct)); src->value = 123; src->text = strdup("Hello World"); MyStruct* dest = malloc(sizeof(MyStruct)); // 将源结构体指针赋值给目标结构体指针 copyStruct(dest, src); // 打印目标结构体中的数据 printf("Value: %d\n", dest->value); printf("Text: %s\n", dest->text); // 释放内存 free(src->text); free(src); free(dest->text); free(dest); return 0; } ``` 在上述示例代码中,我们定义了一个结构体类型为 `MyStruct`,其中包含一个整数成员 `value` 和一个字符串指针成员 `text`。 在 `copyStruct` 函数中,我们通过使用动态内存分配函数 `malloc` 来分配目标结构体中的字符串指针的内存,并使用 `strcpy` 函数将源结构体中的字符串复制到目标结构体中。 在 `main` 函数中,我们创建了源结构体指针 `src` 和目标结构体指针 `dest`,并通过调用 `copyStruct` 函数将源结构体赋值给目标结构体。 最后,记得释放动态分配的内存,以避免内存泄漏。 希望这个示例能对你有所帮助。如果还有其他问题,请随时提问。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值