小结一下,,
1.数组
1 #define _CRT_SECURE_NO_WARNINGS 1 2 #include<stdio.h> 3 #define size 5 4 enum {SIZE=5}; 5 //全局变量在编译前加载到数据域 函数之外定义的变量在数据区 6 //局部变量在调用时加载到栈区,在函数结束时销毁 函数之内定义的变量在栈区(大小为一兆 1MB) 7 int main() 8 { 9 static const int n=5; 10 //数组的大小必须是整数 常量 // 常量的来源: 宏定义 #define size 5 11 // 数组在编译时就要确定大小 // 枚举类型 enum {SIZE=5} 12 // static const int n=5; 13 int a[n]={1,2,3,4,5}; //数组存放是 零下标开始从低地址到高地址存放 14 int b[size]={1,2,3,4,5}; 15 int c[SIZE]={1,2,3,4,5}; 16 //数组名是数组首元素的地址 17 printf("%#p 0x%08x \n",a,&a[0]); 18 // %p打印地址 %#p打印0x........ %x 16进制输出 %08x 16进制输出 宽度为8 不足前面补0 19 printf("%d %d \n",a[2],*a+2); 20 printf("%d \n",sizeof(a)/sizeof(a[1])); //求数组元素个数 sizeof()在编译时就计算出来用数字替代 21 return 0; 22 }
存储模式:
大端模式 低地址存低位,高地址存高位
小段模式 低地址存高位,高地址存低位
运行结果:
2.指针
1 #define _CRT_SECURE_NO_WARNINGS 1 2 #include<stdio.h> 3 int main() 4 { 5 // *的作用 6 int a = 1 * 2; //乘 7 int *p = &a; //声明指针, * 和变量结合 8 int b = *p; //解引用 9 printf("a>>%d *p>>%d b>>%d p>>%#p &a>>%#p\n",a,*p,b,p,&a); //p中存放的是a的地址 10 //类型决定了指针的两个特性: 1.加减整数 11 // 2.解引用 12 int sum = 0x12345678; 13 short *pa=(short *)∑ 14 printf("*pa>>0x%x *(pa+1)>>0x%x \n",*pa,*(pa+1)); //指针加减整数 15 char *pb=(char *)∑ 16 printf("(char)*pb>>0x%x (int)*pa>>0x%x \n",*pb,*pa); //指针类型对解引的影响 17 //同类型指针相减结果是个 整数, 相加无意义 18 char *pc=pb+3 ; 19 printf("pb>>0x%08x pc>>0x%08x pc-pb>>%d pb-pc>>%d\n",pb,pc,pc-pb,pb-pc); 20 return 0; 21 }
运行结果:
3.scanf()
(1)因为我用的编译器是VS,scanf总会报错说scanf不安全,让使用scanf_s
解决方法:1)在代码最上面加上 #define _CRT_SECURE_NO_WARNINGS 一定要加在第一行
2)在属性中关闭SDL检
(2)每次接收一个字符,然后输出。第一次输入了“ASD回车”,然后第一次接收了 A,输出 A,但第二、三、四次不会让你输入,自动接收了S、D、回车
解决方法:每次输入前用 fflush(stdin); 清空输入缓冲区
原文地址:https://www.cnblogs.com/L1035026268/p/12064516.html
时间: 2024-11-10 21:58:38