#include<stdio.h>
#include<malloc.h>
#include<string.h>
/*
C中的const用法(使用VS测试的时候,要注意建立一个C后缀的文件,因为C的编译器和C++的编译器还是有区别的)
*/
//const用作常量,int const a和const int a是一个意思都是表示常量,可以通过指针来改变常量的值
void test1(){
const int a = 10;
int* p = &a;
*p = 20;
printf("p:%d\n",*p);
printf("a:%d\n",a);
}
//const用法作为指针,const char* a,表示a是一个指向常量的一个指针,即常量的内容不能改变,但是指针a(a的值并不是a指向的常量)可以改变
// char* const a就表示a是一个指针常量,即内容可以改变,但是指针a不能改变
void test2(){
const char* a = NULL;
a = "ABCD";//编译通过,运行不会报错,因为这里改变的是指针a,这里改变的并不是常量。这句代码会为字符串"ABCD"在全局区中开辟一块空间,
//然后把字符串的首地址赋值给a
//*a = 'a';//编译报错,因为内容是不可以修改的
char* const b = NULL;
*b = "abcde";//编译通过,因为内容可以修改
//b = "aab";//编译报错,因为指针变量是一个常量,不能被修改
const char* const c = "abcd";//内容和指针变量都不能被修改
}
/*
c语言中free
1、C语言中的free是用来释放内存空间的,释放的是指针所指向的内存空间,释放完之后记得将指针赋NULL,避免出现野指针
2、在C语言中使用free方法的时候要特别注意,如果没有释放好可能会导致宕机,原因是有的内存空间是不能被释放的,如常量区
*/
void testp1(){
//给指针开辟空间的时候,要养成一个良好的习惯
//声明指针的时候,记得赋NULL
char* p1 = NULL;
p1 = (char*)malloc(10);//p1中的内存是在堆中开辟的
p1 = "abcdef";
printf("p1:%s\n",p1);
//释放内存的时候,先要判断是否为NULL,释放完之后记得给指针赋NULL,避免野指针
if (p1 != NULL){
free(p1);
//如果,不赋NULL,释放之后不小心再使用p1的时候就会宕机
//因为,指针p1所指向的内容已经被释放掉了,而p1并不为空,却指向了一个不能被这个程序使用的空间,所以导致了宕机,而p1就成了一个野指针
printf("p1:%d",p1);//这代码会导致宕机
p1 = NULL;
}
}
//下面的程序也会导致宕机,因为,free不能释放常量区中的内存
void testp2(){
char* p2 = "abcdef";//"abcdef"字符串是存放在常量区中的
if (p2 != NULL){
free(p2);
p2 = NULL;
}
}
void main(){
//编译报错,初始值设定项太多,因为,在c语言中编译器会自动添加\0表示结束符,所以实际上a的大小是6,但只定义了5个所以导致编译报错
char a[5] = {'a','b','c','d','e'};
//测试数组大小用sizeof(a)是表示数组的所占内存空间的大小5*sizeof(char)
}
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有