c语言数组在内存中是怎么分配的?

Python016

c语言数组在内存中是怎么分配的?,第1张

C语言中内存为分三类:栈区、堆区、静态数据区。

局部变量在栈上分配,函数调用前的栈指针,要和函数返回后的栈指针一样,否则就会出错。

void test(void)

{

char i,a[10]

printf("0x%x", &i)

printf("0x%x", a)

printf("0x%x", a+1)

printf("0x%x", a+2)

printf("0x%x", a+3)

}

扩展资料

c语言数组在内存分配

示例:

#include<stdio.h>

int main()

{

int a[4] = {11,12,13,14}

int b[4] = {21,22,23,24}

int *pa = &a

int i = 0

while(i<8)

{

i++

printf("now *p value = %d and",*pa)

printf("p addr value = %d \n",pa)

pa++

}

return 0

}

整型数组每个元素在内存中连续存储,每个整型元素存储方式取决于机器硬件。\x0d\x0a一、数组元素都是连续存储的,地址依次从低到高。\x0d\x0a如字符数组 char a[10]\x0d\x0a其元素有10个,为a[0]到a[9], 地址连续。 如果a的起始地址为0x1234,那么后续地址依次为0x1235, 0x1235...0x123D。\x0d\x0a二、每个元素具体存储方式,取决于CPU。 有两种:\x0d\x0a1、小端(Little Endian):\x0d\x0a将低序字节存储在起始地址(低位编址), 地址低位存储值的低位,地址高位存储值的高位 。\x0d\x0a目前大多数CPU是按照这种方式存储的,包括intel和移动端最常见的arm。\x0d\x0a比如4字节整型值为0x12345678的情况,那么在内存中会存储为:\x0d\x0a\x0d\x0a0x78 0x56 0x34 0x12\x0d\x0a2、大端(Big Endian):\x0d\x0a与小端相反, 将高序字节存储在起始地址(高位编址),地址低位存储值的高位,地址高位存储值的低位。\x0d\x0a之前的例子在大端情况下存储为:\x0d\x0a0x12 0x34 0x56 0x78

可以。。

例子如下:

# include <stdio.h>

# include <malloc.h>

void main(void)

{

int len,i, *p

printf("输入要存放元素的个数:")

scanf("%d", &len)//输入长度构造动态一维数组

p = (int *)malloc(sizeof(int)*5)

for(i=0i<len++i)

scanf("%d",(p+i))// p+i等同于&p[i]

// 将动态一维数组p的长度增加至6,并将第6个元素赋值为100

realloc(p,sizeof(int)*6)//realloc重新增加或减少一维数组的长度;

p[5] = 99

printf("输出内容:\n")

for(i=0i<=len++i)

printf("%-5d", p[i])//p[i]等同于*(p+i)

printf("\n")

第一个是在栈上分配:就是在函数调用栈所在的那个栈上

第二个是在“堆区”分配。