公司网站设计与实现的英文文献,长治网站设计,石家庄建站模板源码,外贸网站建设及推广目录
引言
一#xff1a;一维数组
举例如下
1.铺垫知识
数组名是数组首元素的地址#xff0c;但是有两个特殊情况
#xff08;1#xff09;sizeof(数组名)
#xff08;2#xff09;数组名
2.分析讲解上述代码结果
2.字符数组
举例一如下
1.知识铺垫
…目录
引言
一一维数组
举例如下
1.铺垫知识
数组名是数组首元素的地址但是有两个特殊情况
1sizeof(数组名)
2数组名
2.分析讲解上述代码结果
2.字符数组
举例一如下
1.知识铺垫
2.分析结果
举例二如下
举例三如下
三二维数组
1.知识铺垫
举例如下
2.仔细分析讲解
四感谢观看 听说看到日落金山的人接下来的日子会顺顺利利万事胜意生活明朗-----------林辞忧
引言
关于数组名我们熟知的便是数组名是数组首元素的地址但还有一些我们所不了解的小知识点接下来通过面试题来了解各种各样的变化方式
一一维数组
举例如下
int a[] {1,2,3,4};
printf(%d\n,sizeof(a));
printf(%d\n,sizeof(a0));
printf(%d\n,sizeof(*a));
printf(%d\n,sizeof(a1));
printf(%d\n,sizeof(a[1]));
printf(%d\n,sizeof(a));
printf(%d\n,sizeof(*a));
printf(%d\n,sizeof(a1));
printf(%d\n,sizeof(a[0]));
printf(%d\n,sizeof(a[0]1));仔细想想这些代码的结果为啥呢
1.铺垫知识
数组名的理解
数组名是数组首元素的地址但是有两个特殊情况
1sizeof(数组名)
这里的数组名表示整个数组计算的是整个数组的大小单位是字节
2数组名
这里的数组名表示整个数组取出的是整个数组的的地址
2.分析讲解上述代码结果
int a[] {1,2,3,4};
printf(%d\n,sizeof(a));//4*416个字节
printf(%d\n,sizeof(a0));//不是单独的数组名数组名a是首元素的地址a0还是首元素的地址地址的大小4/8个字节
printf(%d\n,sizeof(*a));数组名a是首元素的地址*a是首元素大小为4个字节
printf(%d\n,sizeof(a1));//数组名a是首元素的地址a1是第二个元素的地址大小为4/8个字节
printf(%d\n,sizeof(a[1]));//第二个元素大小为4个字节
printf(%d\n,sizeof(a));//a是数组的地址地址为4/8个字节
printf(%d\n,sizeof(*a));//*aa,同第一个为16个字节
printf(%d\n,sizeof(a1));//a1相对于a是跳过了整个数组但a1还是地址大小为4/8个字节
printf(%d\n,sizeof(a[0]));//首元素的地址大小为4/8个字节
printf(%d\n,sizeof(a[0]1));//第二个元素的地址大小为4/8个字节
2.字符数组
举例一如下
char arr[] {a,b,c,d,e,f};
printf(%d\n, sizeof(arr));
printf(%d\n, sizeof(arr0));
printf(%d\n, sizeof(*arr));
printf(%d\n, sizeof(arr[1]));
printf(%d\n, sizeof(arr));
printf(%d\n, sizeof(arr1));
printf(%d\n, sizeof(arr[0]1));
printf(%d\n, strlen(arr));
printf(%d\n, strlen(arr0));
printf(%d\n, strlen(*arr));
printf(%d\n, strlen(arr[1]));
printf(%d\n, strlen(arr));
printf(%d\n, strlen(arr1));
printf(%d\n, strlen(arr[0]1));
1.知识铺垫
字符串的结束标志是\0
strlen求取的字符串长度是\0之前的不包括\0
sizeof()计算时会统计\0
2.分析结果
char arr[] {a,b,c,d,e,f};
printf(%d\n, sizeof(arr));// 数组名单独放sizeof内部这里的arr表示整个数组计算的是整个数组的大小为6个字节
printf(%d\n, sizeof(arr0));//arr表示数组首元素的地址arr0还是数组首元素的地址为4/8个字节
printf(%d\n, sizeof(*arr));//arr表示数组首元素的地址*arr表示首元素。大小为一个字节
printf(%d\n, sizeof(arr[1]));//表示第二个元素大小是一个字节
printf(%d\n, sizeof(arr));//arr是整个数组的地址是地址就是4/8个字节
printf(%d\n, sizeof(arr1));//arr1是跳过整个数组后的地址4/8个字节
printf(%d\n, sizeof(arr[0]1));//第二个元素的地址4/8个字节
printf(%d\n, strlen(arr));//因为字符数组arr中没有\0,所以在求取字符串长度时会一直往后找产生的结果就是随机值
printf(%d\n, strlen(arr0));//arr0是首元素的地址和第一个一样也是随机值
printf(%d\n, strlen(*arr));//错误arr是数组首元素的地址*arr就是首元素就是‘a’--97
//strlen函数参数的部分需要传一个地址当我们传递的是a时‘a的ASCII码是97那就是将97作为地址传参strlen就会从97这个地址开始统计字符串长度这就是非法访问内存了
printf(%d\n, strlen(arr[1]));//同上是错误的
printf(%d\n, strlen(arr));//arr是数组的地址数组的地址和数组首元素的地址值是一样的那么传递给strlen函数后依然是从数组的第一个元素的位置开始往后统计结果为随机值
printf(%d\n, strlen(arr1));//随机值
printf(%d\n, strlen(arr[0]1));//第二个元素的地址结果也是随机值
举例二如下
char arr[] abcdef;
printf(%d\n, sizeof(arr));//7个字节
printf(%d\n, sizeof(arr0));//4/8个字节
printf(%d\n, sizeof(*arr));//1个字节
printf(%d\n, sizeof(arr[1]));//1个字节
printf(%d\n, sizeof(arr));//4/8个字节
printf(%d\n, sizeof(arr1));//4/8个字节
printf(%d\n, sizeof(arr[0]1));//4/8个字节
printf(%d\n, strlen(arr));//6
printf(%d\n, strlen(arr0));//6
printf(%d\n, strlen(*arr));//错误
printf(%d\n, strlen(arr[1]));//错误
printf(%d\n, strlen(arr));//6
printf(%d\n, strlen(arr1));//跳过整个字符数组结果为随机值
printf(%d\n, strlen(arr[0]1));//5
举例三如下
char *p abcdef;
printf(%d\n, sizeof(p));//p是指针变量指向字符数组的首字符大小为4/8个字节
printf(%d\n, sizeof(p1));//p1是b的地址大小为4/8个字节
printf(%d\n, sizeof(*p));//*p就是a,j就是1个字节
printf(%d\n, sizeof(p[0]));//同上1个字节
printf(%d\n, sizeof(p));//4/8个字节二级指针char **
printf(%d\n, sizeof(p1));//4/8个字节
printf(%d\n, sizeof(p[0]1));//’b的地址4/8个字节
printf(%d\n, strlen(p));//6
printf(%d\n, strlen(p1));//5
printf(%d\n, strlen(*p));//错误
printf(%d\n, strlen(p[0]));//错误
printf(%d\n, strlen(p));//随机值
printf(%d\n, strlen(p1));//随机值
printf(%d\n, strlen(p[0]1));//5 三二维数组
1.知识铺垫
二维数组的数组名表示首行元素的地址
举例如下
int a[3][4] {0};
printf(%d\n,sizeof(a));
printf(%d\n,sizeof(a[0][0]));
printf(%d\n,sizeof(a[0]));
printf(%d\n,sizeof(a[0]1));
printf(%d\n,sizeof(*(a[0]1)));
printf(%d\n,sizeof(a1));
printf(%d\n,sizeof(*(a1)));
printf(%d\n,sizeof(a[0]1));
printf(%d\n,sizeof(*(a[0]1)));
printf(%d\n,sizeof(*a));
printf(%d\n,sizeof(a[3]));
2.仔细分析讲解
int a[3][4] {0};
printf(%d\n,sizeof(a));//单独的数组名大小为3*4*4
printf(%d\n,sizeof(a[0][0]));//4
printf(%d\n,sizeof(a[0]));//a[0]是第一行这个一维数组的数组名数组名单独放在sizeof内部计算的是整个数组的大小大小为4*4
printf(%d\n,sizeof(a[0]1));//a[0]作为第一行的数组名也是a[0][0]的地址没有单独放在sizeof内部所以a[0]1是a[0][1]的地址大小为4/8个字节
printf(%d\n,sizeof(*(a[0]1)));//a[0][1],大小为4
printf(%d\n,sizeof(a1));//4/8
//a是数组首元素的地址是第一行的地址int(*)[4]
//a1是第二行的地址
printf(%d\n,sizeof(*(a1)));//a[1]16
printf(%d\n,sizeof(a[0]1));//4/8
//a[0]是第一行的地址 int (*)[4]
//a[0]1是第二行的地址 int (*)[4]
printf(%d\n,sizeof(*(a[0]1)));//16第二行的大小
printf(%d\n,sizeof(*a));//计算的是第一行的大小16
//a是数组首元素的地址就是第一行的地址
//*a就是第一行a[0]
printf(%d\n,sizeof(a[3]));//16
四感谢观看