初始数组1

版权声明:禁止侵权,打击盗版! https://blog.csdn.net/ChenGX1996/article/details/79961931

一维数组:

例:

int arr1[10] = {1,2,3};     (下标3~9全为零)

int arr2[] = {1,2,3,4};      (四个元素)

int arr3[5] = {1,2,3,4,5};

int arr4[3] = {'a',98,'c'};

char arr5[] = {'a','b','c'};

char arr6[] = "abcdef";      (七个元素,还有\0)

数组创建,[ ]中必须为一个常量,不能使用变量。(可以进行宏定义,#difine  NUM =10,则可以为arr[NUM])

数组不允许整体赋值:

int main()

{

int arr[10] = {0};

int i = 0;

for(;i<10;i++)

{

arr[i] = i;

}

return 0;

}

数组大小:

int arr[10];


int size = sizeof(arr)/sizeof(arr[0]);

数组在内存中是连续存放的;

所以其地址也是递增的;

1.内存中的每一个内存单元(字节)对应一个地址;

2.在32位的平台上指针的大小是4个字节,64位平台是8个字节。

(8个byte位是一个字节)

一维数组的指针访问:

数组的地址在数值上默认和数组首元素地址相等。

数组的数组名其实是数组首元素的地址,前提条件为,数组做右值,或者做运算符时;单独使用时,含义为整个数组。

(通过对数组名+整数的运算,可以得到数组每个元素的地址)

*(arr + 1) ----arr[1]

&arr[1]----arr+1

二维数组:

int arr[3][4];

把二维数组看做一维数组,不过里面的每一个元素都是一个数组!

二维数组是线性储存的!

arr[0][0]  arr[0][1]  arr[0][2]  arr[1][0]  arr[1][1]  arr[1][2]……

二维数组的指针访问:

#include <stdio.h>

int main()

{

int arr[3][4] = {0};

int *p = &arr[0][0];

int i = 0;

for(;i<3*4;i++)

{

*(p+i) = i;

}

for(i=0;i<3;i++)

{

int j = 0;

for(;j<4;j++)

{

printf("%d“,arr[i][j]);

}

}

return 0;

}

数组的运算:

int a[] = {1,2,3,4};

printf("%d\n",sizeof(a));     16(整个数组)

printf("%d\n",sizeof(a+0));     4(首元素地址)

printf("%d\n",sizeof(*a));      4

printf("%d\n",sizeof(a+1));     4

printf("%d\n",sizeof(a[1]));     4

printf("%d\n",sizeof(&a));     4

printf("%d\n",sizeof(*&a));    16   

printf("%d\n",sizeof(&a+1));    4 (下个数组的地址)

printf("%d\n",sizeof(&a[0]));     4

printf("%d\n",sizeof(&a[0]+1));     4


char arr[] = {'a','b','c','d','e','f'};

printf("%d\n",sizeof(arr));     6

printf("%d\n",sizeof(arr+0));     4

printf("%d\n",sizeof(*arr));     1

printf("%d\n",sizeof(arr[1]));    1  

printf("%d\n",sizeof(&arr));    4

printf("%d\n",sizeof(&arr+1));     4

printf("%d\n",sizeof(&arr[0]+1));     4



阅读更多

没有更多推荐了,返回首页