Record12—字符串1级指针的内存模型

目录

1级指针内存模型的建立

总体代码


1级指针内存模型的建立

如下,建立几个内存模型,

void main61()
{
	char buf[20]= "aaaa"; //定义并且初始化
	char buf2[] = "bbbb";
	char *p1 = "111111";
	char *p2 = malloc(100); 
	strcpy(p2, "3333");

	system("pause");
	return ;
}

 画出对应的内存示意图(要想理解好指针,必须理解好内存),

此处想要补充一点的是,以buf2为例,buf2里面的值“bbbb”是放在全局区不假,但栈区也是要给buf2分配了5个单位(四个b+1个“\0”)的内存空间,在栈区分配的5个单位内存,每个单位依次对应的是第一个"b",第二个“b”,第三个,第四个,。。。。。,而buf2这个变量本身所存的是第一个"b"的地址,即整个数组的首地址。这也是数组数据类型和其他数据类型的区别。(数组的长度: (该类型的长度 *  数组的长度 )

再总结一下:

1.数组数据类型长度是根据该类型的长度 *  数组的长度而定的

2.数组变量本身代表的是数组的首地址,而并非所有数组。

3.数组变量在栈区开的内存中存放的是对应的元素值,不是元素的地址。这点很重要。

另外,以程序中的p2再复习一下,内存空间的分配,首先,要明白的是," char *p2 = malloc(100); "这条意味着,再堆区开了100单位的大小的内存空间,并且,p2作为一个指针变量,它保存这个内存空间的地址(即指向它)。而且,"strcpy(p2, "3333");",是先在全局区开辟一块儿区域放“3333”,再把这块儿区域的内容拷贝给p2指向的在堆区的那块儿地址里,不是拷到p2在栈区的变量所占用的空间下面。这点要区分清楚!

注,全局区是个中转站,把字符常量先存下来,凡是"****",都是先存字符常量,再继续后面的操作,都需要占内存的。

 程序员牢记:概念不清晰是产生bug的根源

总体代码

dm06_一级指针内存模型建立.c

#define  _CRT_SECURE_NO_WARNINGS 
#include <stdlib.h>
#include <string.h>
#include <stdio.h>

void main61()
{
	char buf[20]= "aaaa"; //定义并且初始化
	char buf2[] = "bbbb";
	char *p1 = "111111";
	char *p2 = malloc(100); 
	strcpy(p2, "3333");

	system("pause");
	return ;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值