数组的初始化和简单使用
来源:互联网 发布: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;
}
- 数组的初始化和简单使用
- 数组的定义,初始化和使用
- [swift]的简单使用常量变量。字典 数组的初始化
- 数组的定义和初始化
- 数组的定义和初始化
- 对象数组的初始化 分为 静态初始化 和动态初始化
- 数组的初始化之---静态初始化和动态初始化
- 关于数组和数组初始化的问题
- 一维数组和二维数组的创建、初始化、使用、存储、指针访问
- java数组的初始化;数组对象和数组变量
- 数组的初始化和元素的删除
- 数组初始化与使用的问题
- Java数组的创建、初始化、使用
- Java 数组的静态初始化和动态初始化
- Java学习笔记-数组的静态初始化和动态初始化
- 二维数组的静态初始化和动态初始化(重点)
- C++和Java数组初始化的对比
- 数组的初始化--调试和运行
- 深入浅出数据库索引原理
- java-面试简答题答案及详解
- 结构体数组的超简单应用
- TCP的seq和ack号计算方法
- 关系数据库设计理论之函数依赖
- 数组的初始化和简单使用
- 【JAVA】int与integer的区别
- homework
- PTA 7-6(队列) 银行排队问题之单队列多窗口加VIP服务(30 分) 30分代码 大模拟
- 剑指offer--知识迁移问题
- 求1到20的阶乘之和
- java—面试题简答题答案及详解(后50道)
- 新装的ubuntu手动打开root权限
- OSG-OSG中的observer_ptr指针