C语言基础10
栈区间:在函数内部声明的变量都存放在栈区间,比如int char 数组 结构体 指针,只管申请,系统会自动帮我们回收,收回的时间是作用域结束之后,遵循的原则是"先进后出"。
int a = 10;
const int m =10;
printf("%p\n", &m);
printf("%p\n", &a);
堆区间:在五大区间中占用比例较大的区间,需要手动申请和手动释放,遵循的原则 "先进先出",堆区间空间的开辟是无序的,并且没有名字,所以我们需要一个栈区的指针来指向堆内存的数值。
int *b = malloc(sizeof(int ) *2);
printf("%p\n",b);
free(b);
静态区:定义在函数体外面的变量。存放全局变量或者静态变量,生命周期很长,一般到程序结束才释放,使用static修饰的变量,只初始化一次,默认值为0
static int c= 23;
printf("%p\n", &c);
void test3( ){
static int a =10; 第一次调用函数就赋初值,后面在调用函数这个语句就不会在允许。
a++;
printf("%d\n",a); //输出10,11,12
}
test3( );
test3( );
test3( );
常量区:我们平时遇到的常量都放到这里比如"myname",'c',87,87.4
printf("%p\n",&"hello world ");
常量区变量不能被修改:
char *str ="iphone"; //字符指针指向常量区中字符串。
char str1[] ="iphone"; // 将常量区字符串拷贝到栈区的指针名称为str1的空间中。
str1[0] = 'I'; // 可以修改,不报错
str[0] = 'I'; //不报错,但是不能编译成功.程序崩溃
所以我们一般这样写:const char *str ="...." 这样写的好处就是在很大的项目中,我们在修改常量区变量的值的时候会报错,可以立即处理,而不是在编译运行之后报错,才从几万行代码中查找错误的源头。
代码区:一将源码编译成二进制文件,一般是函数。
void func( );
void func( ){
printf(...)'
}
printf("%p\n" , func ); //传入函数名称。
分配内存空间函数:
malloc 最后释放的时候不是真正的"清空",而是标记该空间已经使用完成,里面存放的值可能还存在。
char *str = malloc( sizeof(char) *30 );
printf("%p\n",str);
free(str);
free(str); //不能重复的释放,会崩溃,因为已经没有对应指针名称的空间给你释放,为了安全起见,我们常常在free后面添加。
str = NULL;
calloc 开辟内存空间同时将里面的值清零。如果数据很大的话,效率很低。
char *str1 = calloc( sizeof(char) , 30);
printf("%p\n",str1);
free(str1);
str1 =NULL;
malloc与calloc两个分配内存空间的函数区别:
malloc是堆中分配1块长度为size的连续区域,返回它的首地址.
calloc 是堆中分配N块长度为size的联系区域,返回首地址.
realloc 根据给定的内存地址,重新开辟空间,一般都是开辟更大的空间。
int *num1 = malloc(sizeof(int ) * 10 );
realloc(num1,40); //将10个字节的空间扩大到40个字节。
free(num1);
num1 = NULL;
memset 为刚开辟的空间赋初始值。
char *str3 = malloc(sizeof(char) * 20);
memset(str3,'m',20);
free(str3);
str3 = NULL;
memcpy 拷贝
char *str4 = malloc(sizeof(char) *20);
memcpy(str4,"luoshuailuo",6); // 将luoshuailuo这个字符串拷贝到str4中,只拷贝6个字符。
free(str4);
str4 = NULL;
memcmp 比较q
char *name = malloc(sizeof(char) *100);
char *name1 = malloc(sizeof(char) *100 );
strcpy(name, "LUOSHUAI");
strcpy("name1", "luoshuai");
memcmp(name, name1, 100);
free(name);
free(name1);
name = NULL;
name1 = NULL;
有一个字符串,里面包含字符和数字,要求提取数字,并动态分配内存保存。
int *str ="iphone6and8Plus23cc84";
int count = 0;
for(int i = 0; i< strlen(str);i++ ){
if(*(str+i) >= '0' && *(str+i) <= '9'){
count++;
}
}
int *num =malloc(sizeof(int) * count );
int count = 0;
for(int i = 0; i< strlen(str);i++ ){
if(*(str+i) >= '0' && *(str+i) <= '9'){
*(num+count) = *(str+i) - 48; //字符转化为数字 需要减少48
count++;
}
}
for(int i = 0 ; i < count; i++){
printf("%d\n", *(num+i ));
}
free(num);
num = NULL;
自我学习积累篇:
strncpy(destion,source, num ); 该函数的作用是将"source"的第num个长度字符串拷贝到"destion",
如果num < source的长度,则会讲source的前面的num个字符串拷贝到source,不会添加\0
如果num = source的长度,则会将source所有字符拷贝到source,不会添加\0
如果num > source的长度,则会将source所有字符拷贝到source,后面会持续添加\0, 少多个个就添加多少个.
C语言基础10的更多相关文章
- C语言基础 (10) 变量作用域,生命周期 内存结构
01 课程回顾 1.指针数组 注意: 对于数组来说,在使用sizeof的时候a和&a[0]是不一样的, 虽然以%x打印出来他们都是地址 2.值传递 int a; fun(a); int *** ...
- C语言基础(10)-数组
一.数组的定义 数组就是在内存中连续的相同类型的变量空间. 二.数组在内存中的存储方式 同一个数组所有的成员都是相同的数据类型,同时所有的成员在内存中的地址是连续的,数组名是一个地址的常量,代表数组中 ...
- C++语言基础(10)-虚继承
一.产生背景 先看下列一份代码: //间接基类A class A{ protected: int m_a; }; //直接基类B class B: public A{ protected: int m ...
- Java入门 - 语言基础 - 10.条件语句
原文地址:http://www.work100.net/training/java-if-else.html 更多教程:光束云 - 免费课程 条件语句 序号 文内章节 视频 1 概述 2 if...e ...
- Java语言基础(10)
1 方法(三) 案例:Demo1 import java.util.Scanner; public class Demo1 { static int min(int num1,int num2){ i ...
- [Coursera][计算导论与C语言基础][Week 10]对于“数组应用练习”课后习题的思考题的一些想法
(首先,关于Honor Code,我咨询过了Help Center,分享课后练习的思考题的想法是可以的(注意不是代码),但要标明引用,引用格式来源于https://guides.lib.monash. ...
- C语言的10大基础算法
C语言的10大基础算法 算法是一个程序和软件的灵魂,作为一名优秀的程序员,只有对一些基础的算法有着全面的掌握,才会在设计程序和编写代码的过程中显得得心应手.本文包括了经典的Fibonacci数列.简易 ...
- GO学习-(10) Go语言基础之指针
Go语言基础之指针 区别于C/C++中的指针,Go语言中的指针不能进行偏移和运算,是安全指针. 要搞明白Go语言中的指针需要先知道3个概念:指针地址.指针类型和指针取值. Go语言中的指针 任何程序数 ...
- 《MSSQL2008技术内幕:T-SQL语言基础》读书笔记(下)
索引: 一.SQL Server的体系结构 二.查询 三.表表达式 四.集合运算 五.透视.逆透视及分组 六.数据修改 七.事务和并发 八.可编程对象 五.透视.逆透视及分组 5.1 透视 所谓透视( ...
随机推荐
- 使用ARM和VMSS创建自动扩展的web集群
在很多的商业场景中,用户的访问,峰值时间都是很难预测的,尤其是做一些市场推广活动和促销的时候,到底部署什么规模的web集群合适,这一直是个问题,部署过量会造成高成本和资源不必要的浪费,部署过少,如果到 ...
- EF查询
public ActionResult AllSettings(DataSourceRequest command, Framework.Kendoui.Filter filter = null, S ...
- Android处理XML的三种方式
http://www.cnblogs.com/zhangdongzi/archive/2011/04/14/2016434.html http://blog.csdn.net/zzp16/articl ...
- Codeforces 414B Mashmokh and ACM
http://codeforces.com/problemset/problem/414/B 题目大意: 题意:一个序列B1,B2...Bl如果是好的,必须满足Bi | Bi + 1(a | b 代表 ...
- cygwin--简单备忘
cygwin是windows上使用linux的一个东东 linux中可以apt-get来安装软件,在cygwin中则使用apt-cyg来安装软件 具体怎么玩的呢: 1.下载cygwin 2.下载并且修 ...
- mysqli connect database and print
<?php $connect = mysqli_connect('localhost','root','','intertrading') or die('Unale to connect'); ...
- ECharts JavaScript图表库 ECharts
ECharts开源来自百度商业前端数据可视化团队,基于html5 Canvas,是一个纯Javascript图表库,提供直观,生动,可交互,可个性化定制的数据可视化图表.创新的拖拽重计算.数据视图.值 ...
- thinkjs初试
背景 什么是thinkjs?thinkjs是奇舞团开源的一款NodejsMVC框架,该框架底层基于Promise来实现,很好的解决了Nodejs里异步回调的问题.我为什么会使用thi ...
- 04747_Java语言程序设计(一)_第7章_图形、图像与多媒体
例7.1小应用程序用6种字型显示字符串,显示内容说明本身的字型. import java.applet.*; import java.awt.*; public class Example7_1 ex ...
- Unity调试中心
渐渐在公司接SDK3个月了,一直没有参加项目的游戏功能编写几乎快忘记Unity了, 看到那些前辈编写游戏到发布游戏,总结了下 每一个游戏应该有一个调试中心, 方便策划 测试更好的了解游戏和测试游戏. ...