医疗门户网站模板,上海门户网站制,医院网站备案,惠州房地产网站开发数据结构----c语言复习
一.类型
1.类型的种类
char 1个字节 范围-128~127
short 2个字节 范围-32768~32767
int 4个字节 范围-2147483648~2147483647
long 4个字节 范围-2147483648~2147483647
float 4个字节 有效位为6~7位
float 8个字节 有效位为15~16为
unsigned c…数据结构----c语言复习
一.类型
1.类型的种类
char 1个字节 范围-128~127
short 2个字节 范围-32768~32767
int 4个字节 范围-2147483648~2147483647
long 4个字节 范围-2147483648~2147483647
float 4个字节 有效位为6~7位
float 8个字节 有效位为15~16为
unsigned char 1个字节 范围 0~255
unsigned short 2个字节 范围 0~65535
unsigned int 4个字节 范围 0~4294967295
unsigned long 4个字节 范围 0~4294967295
思考一下下面程序的运行结果注意类型
int main(){unsigned char a,b,c,d;a30;ba;ca;d10*(a);//发生截断 d存的值为64printf(%d %d %d\n,b,c,d);//结果为30 32 64return 0;
}2.隐式转换
1.同整型时
低字节高字节类型转换
有符号类型向无符号类型转换
2.同浮点型时
低字节高字节类型转换
2.整型和浮点型同时存在时
整形向浮点型转换
看下面代码求count的值
int func(){int count0;unsigned int a1;int b-5;while(b5){if(ab5){//有符号类型先向无符号类型进行转换再进行运算count;}}return count;//结果为5
}3.输出格式
%hhd //输出char型(以数字的形式
%hd //输出short型
%d //输出int型
%lld //输出long long型
%u //输出unsigned int型
%c //输出char型
%s //输出字符串
%f //输出float型
%lf //输出double型
%x //以16进制进行输出
%o //以8进制进行输出二.运算符优先级及其结合性
这里借用一下大佬的图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-veOSfeA8-1690986848933)(C:\Users\冉喜文\AppData\Roaming\Typora\typora-user-images\image-20230730223510263.png)]
三.五大内存区
1.代码区代码函数
2.常数区存常数
3.全局静态区全局变量静态变量全局变量与静态变量的区别作用域不同全局变量可以跨文件使用静态变量不能跨问文件使用
4.堆区什么都能存
5.栈区局部变量 函数入口地址
堆区和栈区的区别
1.申请方式不同
2.生命周期不同
3.效率不同
4.生长方向不同
5.内容不同
6.是否产生内存碎片
四.指针
指针装地址的变量
1.看下面代码判断结果
第一个
void fun(char* q) {//这种传递方式是值传递把p的值给qq指向了申请的空间p还是指向空地址q (char*)malloc(100);
}int main() {char* p NULL;fun(p);return 0;
}第二个
void fun(char** q) {//这种传递方式是地址传递*q的值就是p所指向的地址所以这时p会指向申请的新空间*q (char*)malloc(100);
}int main() {char* p NULL;fun(p);return 0;
}2.写出下列四种情况判断程序将会产生怎样的结果
第一种
void GetMemory(char *p)
{p(char*)malloc(100)}
void Test(void){char *strNULL;GetMemory(str);strcpy(str,hello world);printf(str);
}
//此程序会报错跟上面第一个代码一样是值传递 p指向了申请的空间str还是指向空地址第二种
char* GetMemory(void){char p[] hello world;return p;
}
void Test(void){char *str NULL;str GetMemory();printf(str);
}
//此程序会报错因为无法返回p的地址p已经被销毁了第三种
void GetMemory2(char **p, int num){*p (char*)malloc(num);
}
void Test(void)
{char *str NULL;GetMemory(str, 100);strcpy(str,hello);printf(str);
}
//输出 hello第四种
void Test(void){char *str (char*)malloc(100);strcpy(str,hello);free(str);if (str ! NULL){strcpy(str, world);printf(str);}
}
//输出world3.关于数组的指针问题
观察下面代码判断结果
int arr[]{1,2,3,4,5};
*(arr1);//2
*(arr);//编译不通过数组名是常量不能进行操作
*(arr1);//这个数组后面的那个数垃圾值int a[5][2]{(1,2),(3,4),(5,6),(7,8)};//逗号运算符中的两个数取右边的那个数
a[1][0]//6