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 }