指针2-数组指针+内存区域+申请内存+常量指针

数组指针:指向数组的指针(数组指针相当于一个二级指针)

定义:元素类型(*数组指针名)[列数n];
指针指向列数为n的一维数组
int(*p)[4];
#include<stdio.h>
#include<stdlib.h>

int main()
{
	int n[3][4] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 };//二维数组3行4列
	int(*p)[4] = n;//int(*p)[4]=&n[0];
	printf("%d\n", (*p)[4]);//(*p)[4]=n[4];
	system("pause");
}
5
请按任意键继续. . .

数组指针的偏移:

  1. p+1:偏移一行
  2. P++;本身指向偏移一行
  3. P[n];=*(p+n);

内存区域的划分:

C语言程序中,代码是放在内存中执行的,我们大致将程序所占用的内存分为四个区域:栈区 堆区 数据区 代码区。

1. 栈区

由编译器自动分配释放,比如存放函数的参数值,局部变量等。

例如:
void recive(int a,int b) {
    int c;}

其中,参数a,参数b和变量c都是存放在栈区,当函数执行完毕的时候,它们占有的空间自动释放。

2. 堆区

一般由程序员分配释放(如动态内存申请<malloc函数>),若程序员不释放,程序结束时可能由操作系统回收。

例如:
char *src;
src = (char*)malloc(4 *sizeof(char));//动态分配内存,
//表示查找可用的连续4个字节内存的空间,并将该内存首地址给指针赋值

3.数据区

分为两种:
1、常量区:存放常量,一般是字符串常量。
2、全局区(静态区):存放全局变量(定义在函数外的变量)和静态(static)变量。
该区域是在程序开始时分配内存,程序结束后由操作系统释放。

4.程序代码区

这个区域存放函数体的二进制代码,也是由操作系统进行管理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柳一航

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值