您的位置:首页 > 编程语言 > C语言/C++

数组的初始化和简单使用

2017-10-10 23:05 155 查看
关于数组,有好多值得我们注意的地方,今天就来和大家浅谈一下数组的故事。(以下操作在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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言 数组
相关文章推荐