首先说明数组只能存放同一种数据类型,对于数组求长度可以用int length=sizeof(arr)/sizeof(arr[0]),数组从下标0开始访问的;
1. 一维数组的创建
[]中要给一个常量才行,不能使用变量。在创建数组时,如果不想说明大小就得初始化;接下来我们来讨论内存中如何分配:对于char arr1[]=”a,b,c”中存储时默认在后面还有一个’/0’,对于有{‘a’,’b’,’c’},默认没有’/0’;对于*p=”aabc”其中p存放了数组首元素的地址。
*数组在内存中的存储
数组在内存中连续存储。
2. 一维数组的指针访问
看代码:
#include<stdio.h>
int main()
{int arr={1,2,3,4}
printf(“%p”,arr);
printf(“%d”,*arr);
}
这个代码可以说明数组的数组名其实是首元素的地址
用指针访问其实就是指针指向数组名+整数,就可以得到每个元素的地址。
3. 二维数组在内存中的存储
二维数组也是连续存储
其实对于intarr[3][4]的数组来说,在内存中是一行紧挨一行的存储,
4. 二维数组的指针访问:数组运算
一维数组
#include<stdio.h>
int main()
{
int a[]={1,2,3,4};
printf(“%d”,sizeof(a));//整个数组的大小16
printf(“%d”,sizeof(a+0));//首元素地址 4
printf(“%d”,sizeof(*a)); //首元素a大小4
printf(“%d”,sizeof(a+1));//第二个元素地址大小4
printf(“%d”,sizeof(a[1]));//数组第二个元素大小4
printf(“%d”,sizeof(&a));//首地址大小4
printf(“%d”,sizeof(&a+1))//;下一个数组大小4
printf(“%d”,sizeof(&a[0]))//;a首元素大小4
printf(“%d”,sizeof(&a[0]+1));//第二个 4
return 0;}
sizeof()计算的是数组的长度
strlen计算的是字符串的长度
注意:当数组作为函数参数传递时,数组名时数组首元素的地址,故无法使用以上两个,所以在传址时,应该提供数组名,数组元素个数。
字符数组
#include<stdio.h>
int main()
{
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]));//数组b大小1
printf(“%d\n”,sizeof(&arr));首元素地址4
printf(“%d\n”,sizeof(&arr+1));下个数组大小4
return 0;}
Strlen()大小的运算
不包括’/0’,计算从指定位置知道’/0’
#include<stdio.h>
int main()
{printf(“%d/n”,strlen(arr));//该数组不包括’\0’故结果为随机值
printf(“%d/n”,strlen(arr+0));//随机值
printf(“%d/n”,strlen(*arr));//’a’的地址为97,未知地址,题目错误
printf(“%d/n”,strlen(arr[1]));//’b’的地址未知,题目错误。
return 0;}
指针数组相关计算
#include<stdio.h>
int main()
{char *p=''abcdef';
printf("%d/n",sizeof(p));//p存放元素a的地址 4
数组重要点总结
首先说明数组只能存放同一种数据类型,对于数组求长度可以用int length=sizeof(arr)/sizeof(arr[0]),数组从下标0开始访问的;
1. 一维数组的创建
[]中要给一个常量才行,不能使用变量。在创建数组时,如果不想说明大小就得初始化;接下来我们来讨论内存中如何分配:对于char arr1[]=”a,b,c”中存储时默认在后面还有一个’/0’,对于有{‘a’,’b’,’c’},默认没有’/0’;对于*p=”aabc”其中p存放了数组首元素的地址。
2,数组在内存中的存储
数组在内存中连续存储。
2. 一维数组的指针访问
看代码:
#include<stdio.h>
Int main()
{int arr={1,2,3,4}
Printf(“%P”,arr);
Printf(“%d”,*arr);
}
这个代码可以说明数组的数组名其实是首元素的地址
用指针访问其实就是指针指向数组名+整数,就可以得到每个元素的地址。
3. 二维数组在内存中的存储
二维数组也是连续存储
其实对于intarr[3][4]的数组来说,在内存中是一行紧挨一行的存储,
4. 数组运算
#include<stdio.h>
Int main()
{
int a[]={1,2,3,4};
printf(“%d”,sizeof(a));//整个数组的大小16
printf(“%d”,sizeof(a+0));//首元素地址 4
printf(“%d”,sizeof(*a)); //首元素a大小4
printf(“%d”,sizeof(a+1));//第二个元素地址大小4
printf(“%d”,sizeof(a[1]));//数组第二个元素大小4
printf(“%d”,sizeof(&a));//首地址大小4
printf(“%d”,sizeof(&a+1))//;下一个数组大小4
printf(“%d”,sizeof(&a[0]))//;a首元素大小4
printf(“%d”,sizeof(&a[0]+1));//第二个 4
return 0;}
sizeof()计算的是数组的长度
strlen计算的是字符串的长度
注意:当数组作为函数参数传递时,数组名时数组首元素的地址,故无法使用以上两个,所以在传址时,应该提供数组名,数组元素个数。
字符数组
#include<stdio.h>
Int main()
{
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]));//数组b大小1
printf(“%d\n”,sizeof(&arr));首元素地址4
printf(“%d\n”,sizeof(&arr+1));下个数组大小4
return 0;}
Strlen()大小的运算
不包括’/0’,计算从指定位置知道’/0’
#include<stdio.h>
int main()
{printf(“%d/n”,strlen(arr));//该数组不包括’\0’故结果为随机值
printf(“%d/n”,strlen(arr+0));//随机值
printf(“%d/n”,strlen(*arr));//’a’的地址为97,未知地址,题目错误
printf(“%d/n”,strlen(arr[1]));//’b’的地址未知,题目错误。
return 0;}
指针数组相关计算
#include<stdio.h>
int main()
{char *p=”abcdef”;
printf(“%d\n”,sizeof(p));//p存放首元素地址 4
printf(“%d\n”,sizeof(p+1));//b的地址 4
printf(“%d\n”,sizeof(*p));//首元素大小1
printf(“%d\n”,sizeof(p[0]));//首元素大小1
printf(“%d\n”,sizeof(&p));//字符指针指针变量p的地址大小,结果为4
printf(“%d\n”,sizeof(&p+1));//4
printf(“%d\n”,strlen(p));//从a的地址找,直到’\0’ .6
return 0;
}
}