数组的初始化和简单使用

来源:互联网 发布:goodnight软件如何更新 编辑:程序博客网 时间:2024/06/16 18:07

关于数组,有好多值得我们注意的地方,今天就来和大家浅谈一下数组的故事。(以下操作在32位系统下进行)

1.数组的初始化

数组的初始化有这样几个点需要我们注意:
①如果我们只是定义了一个数组但并未对其初始化时,数组中的元素全是随机值;
②当我们初始化数组的元素(注意是从第一个元素开始初始化)小于数组的大小时,其余未初始化的数组元素均被编译器初始化为0;例如:int arr[5]={1,2};
③当我们有确定的元素个数时,在定义数组时也可以不必标明数组大小,编译器会自动计算其大小;例如:int arr[]={1,2,3};
注意:在C语言中还有一种不太常见的初始化方法,就是给指定元素进行初始化;例如:
这里写图片描述

这里写图片描述

这里,我们可以看到,这种初始化方法在给指定元素初始化后,其余元素均被初始化为0。

注意了,我刚刚所说的方法仅仅是在c语言语法中,那如果在c++语法中呢?
这里写图片描述

我们可以看到,对于同样一段代码,在c++中是无法通过编译的,有可能是c++的语法更为严格一些,如果大家有兴趣可以探索一番,我们可以一起交流,共同学习。

2.数组的使用

今天就简单的为大家介绍一下数组的使用,让大家可以进一步了解数组(当然,今天我们主要以一维整形数组为例
int main()
{
int arr[] = {1,2,3,4,5};

printf("%d\n",sizeof(arr));printf("%d\n", sizeof(arr+0));printf("%d\n", sizeof(*arr));printf("%d\n", sizeof(arr+1));printf("%d\n", sizeof(arr[1]));printf("%d\n", sizeof(&arr));printf("%d\n", sizeof(&arr+1));printf("%d\n", sizeof(&arr[0]));printf("%d\n", sizeof(&arr[0]+1));system("pause");return 0;

}

看到上面这段代码,不知道大家计算出来的结果怎么样,可以对下答案哦!
这里写图片描述

下面我将为大家分析一下上面这段代码:注:在32位环境下测试结果
我们要注意对于sizeof操作符和&操作符:
当数组名单独出现时,它代表着整个数组的地址(尽管它的地址和数组首元素地址相同),sizeof(arr)就相当于求整个数组的大小;
* 对于arr+0我们可以看到,数组名并不是单独出现,因此,当数组名并不是单独出现时,它表示数组首元素的地址,地址也就四个字节*
*arr,这里arr也并不是单独出现,它也就代表数组的首元素地址,然后对它进行解引用,*arr表示数组的首元素;
arr+1,表示数组的第二个元素的地址,因为是地址,所以大小仍为4;
⑤这个我也就不用多说了吧!
对于&操作符而言,当只有arr时,&arr表示取整个数组的地址;
&arr+1,这里arr并不是单独出现,arr表示数组首元素的地址,则&arr+1表示第二个数组元素的地址;
&arr[0],[]的优先级比&高,因此,&arr[0]表示取数组的第一个元素的地址,当然,地址的大小为4个字节;
⑨&arr[0]+1,也就表示数组第二个元素的地址;

字符数组初始化

①char arr[ ]={‘a’, ‘b’,’c’,’d’,’e’};
②char arr[ ]=”abcde”;//字符串数组
这两种方式的不同之处在于:第二种的元素个数比第一个多了一个‘/0’。

我们看一段代码进行简单的应用
int main()
{
char arr[] = {‘a’,’b’,’c’,’d’,’e’,’f’};
printf(“%d\n”,strlen(arr));//随机值 因为数组中没有‘/0’,所以strlen无法计算出确定的值
printf(“%d\n”, strlen(arr+0));//随机值
printf(“%d\n”, strlen(&arr));//随机值
printf(“%d\n”, strlen(&arr+1));随机值
system(“pause”);
return 0;
}
加上一个‘/0’
int main()
{
char arr[] = {‘a’,’b’,’c’,’d’,’e’,’f’,’0’};
printf(“%d\n”,strlen(arr));//6
printf(“%d\n”, strlen(arr+0));//6
printf(“%d\n”, strlen(&arr));//6
printf(“%d\n”, strlen(&arr+1));//随机值
system(“pause”);
return 0;
}

定义一个字符串常量:
char *str=”abcdef”;
int main()
{
char *str = “abcdef”;
printf(“%d\n”,sizeof(str));//4 地址的大小为4个字节
printf(“%d\n”, sizeof(str+1));//4 这也是一个地址,并且是第二个字符的地址
printf(“%d\n”, sizeof(*str));//1 表示第一个字符 大小为一个字节
printf(“%d\n”, sizeof(str[0]));//1
printf(“%d\n”, sizeof(&str));//4 注意这是指针变量str的地址,不是这个常量字符串的地址
printf(“%d\n”, sizeof(&str+1));//4
printf(“%d\n”, sizeof(&str[0]+1));//4
system(“pause”);
return 0;
}

原创粉丝点击