我是靠谱客的博主 无语眼神,最近开发中收集的这篇文章主要介绍c语言数组、数组相关的计算,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

数组

1.数组的创建:

元素类型 数组名 [常量或者常量表达式]  如:int arr1[10];

注:即使是被const修饰的变量也不能作为[]中的内容,它本质上依然属于变量,只是具有常量属性

2.数组的初始化:

   创建数组时,若不指定数组大小一定要初始化,但是初始化后可以不指定数组大小

注:(1)字符串放在数组里时,默认最后还有,字符数组则不是,有啥放啥

    (2)char *p="abcdef",p中放的是'a'的地址,通过这个地址可以找到a,以及a后面的字符

3.下标引用操作符: []

   数组通过下标(从0开始)来访问,数组大小计算:len=sizeof(arr1)/sizeof(arr1[0])

4.一维数组在内存中连续存储:用语句printf("&arr1[%d]=%pn",i,&arr1[i]);来查看各个元素地址

5.指针

(1)32位平台上指针大小为4个字节,64位则是8个字节

(2)指针是一个用来存放地址的一个变量

(3)对于一维数组,除了sizeof(单个数组名)、&单个数组名以外,其它地方出现的都是代表数组首元素地址

(4)获得数组中每个元素地址:A.数组名+整数(首元素地址+整数) B.&arr1[i]  

(5)int *p=arr1,arr1+i等价于 p+i,因为p里保存的就是首元素地址arr1,*(p+i)就是元素本身,p[i]也是元素本身,因为p相当于shuzumrr1

6.二维数组的创建和初始化

(1)下标第一项可以省,第二项不能省

(2)也是通过下标来访问

(3)二维数组在内存中也是连续存储的,(只是一行完了再一行)

(4)二维数组arr1[3][4],看成一维数组是三个元素,arr1[0]、arr1[1]、arr1[2],只是这三个元素又是一个数组而已

(5)二维数组arr1[3][4],其中单独的数组名arr1代表的是将其看为一维数组时第一个元素arr1[0]的地址,而仅仅是这个二位数组的首地址应该是&arr1[0][0].

(6)二维数组指针访问更加方便(初始化直接利用指针往后算,输出时还有利用两个for循环有序输出)

7.关于数组的运算

注意:sizeof()求得是变量或者空间开辟空间的大小,而strlen()函数参数接收的必须是一个有效地址

(1)

#include <stdio.h>
int main()
{
	int a[]={1,2,3,4};  
	printf("%dn",sizeof(a));  //16 整个数组大小
	printf("%dn",sizeof(a+0));  //4 首元素地址
	printf("%dn",sizeof(*a));  //4 首元素所占空间大小,1个整型
	printf("%dn",sizeof(a+1));  //4 第二个元素地址大小
	printf("%dn",sizeof(a[1]));  //4 第二个元素所占空间大小
	printf("%dn",sizeof(&a));  //4 整个数组地址
	printf("%dn",sizeof(&a+1));  //4 跳到下一个地址开头,但是目前还是4
	printf("%dn",sizeof(&a[0]));  //4 首元素地址
	printf("%dn",sizeof(&a[0]+1));  //4 第二个元素的地址
	return 0;
}

(2)
#include <stdio.h>
int main()
{
	int a[]={1,2,3,4};  
	printf("%dn",sizeof(a));  //16 整个数组大小
	printf("%dn",sizeof(a+0));  //4 首元素地址
	printf("%dn",sizeof(*a));  //4 首元素所占空间大小,1个整型
	printf("%dn",sizeof(a+1));  //4 第二个元素地址大小
	printf("%dn",sizeof(a[1]));  //4 第二个元素所占空间大小
	printf("%dn",sizeof(&a));  //4 整个数组地址
	printf("%dn",sizeof(&a+1));  //4 跳到下一个地址开头,但是目前还是4
	printf("%dn",sizeof(&a[0]));  //4 首元素地址
	printf("%dn",sizeof(&a[0]+1));  //4 第二个元素的地址
	return 0;
}
注意:只要是地址,不管是整型数组,还是字符数组,只要是32位平台,都是4个字节

(3)

#include <stdio.h>
int main ()
{
	char arr[]={'a','b','c','d','e','f'};
	printf("%dn",strlen(arr));  //19随机值,不知道什么时候会遇到
	printf("%dn",strlen(arr+0));  //19随机值
	//printf("%dn",strlen(*arr));  //系统奔溃,字符a不是一个有效地址
	//printf("%dn",strlen(arr[1]));  //系统奔溃,字符a不是一个有效地址
	printf("%dn",strlen(&arr));  //19随机值 先找到整个数组地址,然后从第一个字符往后找,所以和1、2随机数字是一样
	printf("%dn",strlen(&arr+1));  //13随机值,这里因为整个数组地址加1,相当于把它跳过去了,19-6=13(注意)
	printf("%dn",strlen(&arr[0]+1));  // 18随机值,这里因为是从第二个元素地址开始往后找,19-1=18(注意)
	return 0;
}


(4)

#include <stdio.h>
int main()
{
	char *p="abcdef";
	printf("%dn",sizeof(p));  //4 ,p存放首元素a的地址,指针大小都为4
	printf("%dn",sizeof(p+1));  //4,元素b的地址
	printf("%dn",sizeof(*p));  //1,首元素所占空间大小
	printf("%dn",sizeof(p[0]));  //1,首元素所占空间大小
	printf("%dn",sizeof(&p));  //4,给指针变量取地址,还是个地址,所以4个字节
	printf("%dn",sizeof(&p+1));  //4,p指向下一个元素的地址(指向b的地址)
	printf("%dn",sizeof(&p[0]+1));  //4 第二个元素的地址
	return 0;
}
注意:&和*的区分使用啦

(5)

#include <stdio.h>
int main()
{
	char *p="abcdef";
	printf("%dn",strlen(p)); //6,p存的是首字符a的地址,从这个入口进去,直到遇到结束,(不算在内)
	printf("%dn",strlen(p+1));  //5,p+1指向第二个字符,再与第一个一样
	printf("%dn",strlen(*p)); //系统奔溃,字符a不算一个有效地址
	printf("%dn",strlen(p[0]));  //系统奔溃,字符a不算一个有效地址
	printf("%dn",strlen(&p)); //随机值,(注意:易错,这里给指针变量取地址还是地址,但是从这个地址开始查找,后面情况就不确定了)
	printf("%dn",strlen(&p+1));  //随机值(问题和上一个一样,只是p指向的元素向后挪了一个)
	printf("%dn",strlen(&p[0]+1)); //5,入口地址从第二个元素开始
	return 0;
}


(6)

#include <stdio.h>
int main()
{
	int a[3][4]={0};
	printf("%dn",sizeof(a));  //48,该数组共有12个元素,每个元素4字节,一个48字节
	printf("%dn",sizeof(a[0][0]));   //4,就代表第一个元素所占空间大小
	printf("%dn",sizeof(a[0]));  //16 将二维数组看成一维数组,则该数组共有3个元素,a[0]为第一个元素,(即第一行)
	printf("%dn",sizeof(a[0]+1));  //4 a[0]看成一维数组的数组名,代表首地址,再加一,第二个元素地址
	printf("%dn",sizeof(a+1));  //4,a是首元素地址(第一行),加一跳过第一行来到第二行首元素位置(注意:算地址都是4位)
	printf("%dn",sizeof(&a[0]+1)); //4  a[0]是一维数组的数组名,对它取地址代表整个数组,再加一,来到第二行(注意:同上一个)
	printf("%dn",sizeof(*a));  //16 ,a是首元素地址(第一行地址),对其解引用,为第一行
	printf("%dn",sizeof(a[3]));  //16 虽然不存在,但是和a[0]一样,有4个元素,每个元素4字节,工16字节
	return 0;
}
注意:地址加整数算的还是地址








最后

以上就是无语眼神为你收集整理的c语言数组、数组相关的计算的全部内容,希望文章能够帮你解决c语言数组、数组相关的计算所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部