数组指针:指向数组的指针(数组指针相当于一个二级指针)
定义:元素类型(*数组指针名)[列数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
请按任意键继续. . .
数组指针的偏移:
- p+1:偏移一行
- P++;本身指向偏移一行
- 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.程序代码区
这个区域存放函数体的二进制代码,也是由操作系统进行管理。