内存四区与指针的分析
来源:互联网 发布:tears and rain 知乎 编辑:程序博客网 时间:2024/06/05 23:03
数据类型:数据类型是固定内存大小的别名。
int a[10]={};
a的大小等于&a,但a+1的大小不等于&a+1,原因是数据类型不一样
变量:变量是内存空间的标号
内存四区
堆区,栈区,全局(静态)和常量区,代码区
全局(静态)和常量区:如果两个字符串完全一样C++编译器只会定义一份
Strcmp(p1,p2)相当于java中的equals
在被调用函数里的临时区分配内存,主调用函数是不能用的
char * getString()//运行错误提醒返回局部或临时变量
{
char buf[10];
strcpy(buf,"aasd");
return buf;
},返回已回收的内存空间地址
栈的开口向下,堆的开口向上,在栈区一次性分配buf[100] 地址是从下往上,因为生长方向与内存存放方向是两个不同概念
/对参数的指针类型应该怎么理解
//理解角度需要从两个角度出发
//站在c/c++编译器的角度 对形参,如果是指针类型,c编译器只会分配四个自己的内存。
////char *p7 形参 是变量
//指针的数据类型到底是什么
指针的数据类型是指它所指向的内存空间的数据类型
指针的数据类型具有依fu特性
结论:指针的步长,根据所指内存空间类型来定。
char 型一次跳一个字节,int 型一次跳4个字节
void senddata01(char *p1); void senddata01(char* p1);
void senddata02(char ** p1); void senddata02(char * *p1); void senddata02(char **p1);
void senddata03(char ***p1);
void senddata04(char *p[]); void senddata04(char * p[]); void senddata04(char *p []);
void senddata05(char (*p)[10]); void senddata05(char (*p) [10]);
void senddata05(char *****p4);
char *p ="sss";
*p = 'a'; //报错,因为sss在常量区不可以修改
在全局区Int a = 10 其中10是字面量,存放在不是堆栈,全局区的区域,不能取地址,可以理解为代码区之类的区域
不可以通过函数出传参改变指针变量的值(即指针的指向),但可以改变指针变量所指向的值
//因为后缀++的优先级,高于,*p;
void copy_str4(char *from , char *to)
{
while((*to ++ = *from++) != '\0')
{
;
}
}
Char类型在实参赋值给形参的时候会隐式类型转换为int
int copy_str2(char *from , char *to)
{
int ret = 0;
if (from ==NULL || to== NULL)
{
ret = -1;
printf("func copy_str2() err: %d, (from ==NULL || to== NULL)", ret);
return ret;
}
for (; *from!='\0'; from ++, to++ )
{
*to = *from;
}
*to = '\0';
return ret;
}
void main1()
{
int rv = 0;
char from[100] = {0};
char to[100] = {0};
strcpy(from, "fromabc");
rv = copy_str2(from, to);
if (rv != 0)
{
printf("func copy_str2:%d", rv);
return ;
}
printf("%s", to);
system("pause");
}
不同于
void main1()
{
int rv = 0;
char *from = {0};
char *to = {0}; //没有分配内存
strcpy(from, "fromabc");
rv = copy_str2(from, to);
if (rv != 0)
{
printf("func copy_str2:%d", rv);
return ;
}
printf("%s", to);
system("pause");
}
切记:主调函数分配内存,被调函数使用,被调函数通过指针将结果甩出
- 内存四区与指针的分析
- 内存四区模型与指针
- 内存四区模型与指针
- 数据结构(四) --- 内存与指针
- 从内存四区的角度理解指针
- c语言指针与内存分析
- 指针知识(四) 数组与指针、动态分配内存、指针函数与函数指针
- 指针、内存与对象的指针成员
- 内存 变量 指针(四)
- C——指针与内存四区提高(1)
- Go学习笔记四(指针与内存分配)
- 指针数组 与 数组指针 的分析
- 指针动态申请内存的错误分析
- Qt C++ 指向对象的指针与内存分配的问题分析
- 二级指针的三种内存模型的整理与分析
- 内存泄漏、资源泄漏、空指针等问题的分析与总结
- 主题四 指针和数组(下)----25.指针数组与数组指针分析
- 第八讲 数组的定义与四种赋值方式、遍历和内存分析
- oracle 数据库访问性能优化
- 一个ACM过来人的心得
- 14-题目1065:输出梯形
- 冒泡排序
- java父子类继承(1)
- 内存四区与指针的分析
- RS232,RS485波形分析
- menu中的item直接显示在toolbar上
- JS中调用函数是否加括号
- 爬虫简单架构
- 019 virtualbox虚拟机无法上网的一种情况
- Android之Spinner选中列表数据不显示数据问题
- java 之 集合遍历,存储结构,集合特点
- Leetcode 292