数组的初始化和简单使用
2017-10-10 23:05
155 查看
关于数组,有好多值得我们注意的地方,今天就来和大家浅谈一下数组的故事。(以下操作在32位系统下进行)
①如果我们只是定义了一个数组但并未对其初始化时,数组中的元素全是随机值;
②当我们初始化数组的元素(注意是从第一个元素开始初始化)小于数组的大小时,其余未初始化的数组元素均被编译器初始化为0;例如:int arr[5]={1,2};
③当我们有确定的元素个数时,在定义数组时也可以不必标明数组大小,编译器会自动计算其大小;例如:int arr[]={1,2,3};
注意:在C语言中还有一种不太常见的初始化方法,就是给指定元素进行初始化;例如:
这里,我们可以看到,这种初始化方法在给指定元素初始化后,其余元素均被初始化为0。
注意了,我刚刚所说的方法仅仅是在c语言语法中,那如果在c++语法中呢?
我们可以看到,对于同样一段代码,在c++中是无法通过编译的,有可能是c++的语法更为严格一些,如果大家有兴趣可以探索一番,我们可以一起交流,共同学习。
int main()
{
int arr[] = {1,2,3,4,5};
}
看到上面这段代码,不知道大家计算出来的结果怎么样,可以对下答案哦!
下面我将为大家分析一下上面这段代码:注:在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[ ]=”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;
}
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]的简单使用常量变量。字典 数组的初始化
- C_综合使用数组实现简单的学生成绩管理系统
- 使用随机函数初始化一个数组,并对数组进行排序(冒泡排序法和选择排序法)
- 问题小结(4)-在res里定义数组的简单使用
- C++_数组的使用简单举例_输入与输出
- 问题小结(4)-在res里定义数组的简单使用
- MISL深入学习(2) 简单数组的使用
- <Power Shell>01 四则运算和数组简单使用
- 使用数组实现简单线性表功能
- 数据结构学习笔记(3)_使用数组实现简单线性表功能
- json数组的简单使用
- C语言学习6 :指针的定义,指针类型要合法,指针要初始化,指针做函数参数,数组和指针的通用性,指针+1所代表的空间,void * 指针,交换函数中的指针,数组和字符型指针区别,字符型指针的应用,使用指针完成字符操作函数
- Java使用for( : ) 为String[] 数组初始化注意事项
- [黑马程序员]_数组定义、初始化及使用
- 1.在使用new创建数组后,此时数组还是一个引用数组。 只有再创建新的对象,并把对象赋值给数组引用,到此初始化结束2.什么是引用类型?
- 关于c中无法使用动态数组的简单解决办法
- 函数指针数组的使用(简单)
- C语言使用数组实现简单队列
- [黑马程序员]_数组定义、初始化及使用
- 简单的数组查找算法 出现的错误:数组不可以使用引用传址