2308-初识C语言part2-指针+结构体

发布时间 2023-08-07 22:24:35作者: 积分三换

1.指针

内存如何编号?

答:32位——32跟物理线,有32个长度的二进制序列,共2^32个内存单元,一个内存单元为一字节,2^32 byte = 4 GB

int num为4个字节,故占四个内存,标记为4个中最小的编号(0x0012ff44)

指针就是地址

 指针的大小是相同的,32位是4,64位是8,不管是char*,int*,long*,float,

 

 1 #include <stdio.h>
 2 
 3 int main()
 4 {
 5     int  var = 20;   /* 实际变量的声明 */
 6     int* ip;        /* 指针变量的声明 */
 7 
 8     ip = &var;  /* 在指针变量中存储 var 的地址 */
 9 
10     printf("var 变量的地址: %p\n", &var);
11 
12     /* 在指针变量中存储的地址 */
13     printf("ip 变量存储的地址: %p\n", ip);
14 
15     /* 使用指针访问值 */
16     printf("*ip 变量的值: %d\n", *ip);
17 
18     return 0;
19 }

 

 2.结构体

结构体是C语言中特别重要的知识点,结构体使得C语言有能力描述复杂类型。

 1 #include <stdio.h>
 2 struct Stu//创建一个学生
 3 {
 4     char name[20];
 5     int age;
 6     double score;
 7 };
 8 
 9 struct Book//创建一本书
10 {
11     char name[20];
12     float price;
13     char id[30];
14 };
15 int main()
16 {
17     struct Stu s = { "张三",20,85.5 };//结构体的创建和初始化
18     printf("1: %s %d %lf\n", s.name, s.age, s.score);//结构体变量,.为点操作符,表示成员变量
19     struct Stu * ps = &s;
20     printf("2: %s %d %lf\n", (*ps).name, (*ps).age, (*ps).score);//结构体变量,.为点操作符,表示成员变量
21     printf("3: %s %d %lf\n", ps->name, ps->age, ps->score);//->左边为结构体指针->成员变量名
22 
23     return 0;
24 }

 

习题:

 stuct Stu 为结构体类型

----------------------------------

 1 #define _CRT_SECURE_NO_WARNINGS 1
 2 #include <stdio.h>
 3 int max(int x, int y)
 4 {
 5     int temp = 0;
 6     if (x > y)
 7         return (x);
 8     else
 9         return (y);
10 }
11 int main()
12 {
13     int x = 0;
14     int y = 0;
15     scanf("%d%d", &x, &y);
16     int z = max(x, y);
17     printf("max = %d\n", z);
18     return 0;
19 }

-----------------------------------------------

 

 1 #define _CRT_SECURE_NO_WARNINGS 1
 2 #include <stdio.h>
 3 int main()
 4 {
 5     int M = 0;
 6     scanf("%d", &M);
 7     if (M % 5 == 0)
 8         printf("YES\n");
 9     else
10         printf("No\n");
11     return 0;
12 }