对数组的简单总结
来源:互联网 发布:华师在线网络教育怎么 编辑:程序博客网 时间:2024/06/05 00:18
一、一维数组的创建和初始化
1.数组的创建:
type_t arr_name [const_n]; type_t是指数组的元素类型,const_n是一个常量表达式
eg: int arr1[10] ;整型数组
int *arr2[10]; 指针数组
int count = 10; int arr3[count];
char arr4[10];
float arr5[1];
double arr6[20];
注意:int arr[n] 错误,[ ]中要给一个常量,变量不可以
int arr[ ]={0};表示只有一个数组元素
2.数组的初始化:在创建数组的同时给数组的内容一些合理初始值(初始化)。
eg: int arr1[ ] = {1,2,3,4};
char arr2[3] = {'a',98, 'c'}; char arr3[ ] = {'a','b','c'}; (两种写法相同)
char arr4[ ] = "abcdef";(放有7个元素,最后一个为"\0")
注意:数组在创建的时候如果想不指定数组的确定的大小就得初始化。数组的元素个数根据初 始化的内容来确定。
二、一维数组的使用
[ ] ,下标引用操作符,它其实就数组访问的操作符。
(1)数组是使用下标来访问的,下标是从0开始。
(2)数组的大小可以通过计算得到。
int arr[10];
int arr[10];
int sz = sizeof(arr)/sizeof(arr[0]);
数组在内存中是连续存放的,随着数组下标的增长,元素的地址呈递增规律。
三、一维数组的指针访问
1.指针的初步介绍
指针可以理解为一个变量,是一个专门用来存放地址的一个变量。
在C语言中取出某个变量的地址。
eg: int n = 10; &n; //取出n的地址。
eg: int n = 10; &n; //取出n的地址。
指针变量的定义:
eg: int (char)(double) *ptr = NULL; //定义一个指针变量,初始化为NULL
2.一维数组的指针访问
数组的数组名其实是数组首元素的地址。
通过对数组名+整数的运算,其实可以获取到数组每个元素的地址,可以使用指针来访问数组。
eg: #include <stdio.h>
int main()
{
int arr[10] = {0};
int i = 0;
int *p_arr = arr;
for(i=0; i<sizeof(arr)/sizeof(arr[0]); ++i)
{
*(p_arr+i) = i;
}
for(i=0; i<sizeof(arr)/sizeof(arr[0]); ++i)
{
printf("%d\n", *(p_arr+i));
}
return 0;
}
三、二维数组的创建和初始化
三、二维数组的创建和初始化
1. 二维数组的创建
eg: int (char)(double) arr[3][4];
2.二维数组的初始化
eg: int arr[3][4] = {1,2,3,4};
int arr[3][4] = {{1,2},{4,5}};
int arr[ ][4] = {{2,3},{4,5}};
四、二维数组的使用
1. 二维数组在内存中的存储
二维数组在内存中也是连续存储的。
二维数组的行数可以省略,但列数不可以省略。
2. 二维数组的指针访问
eg: #include <stdio.h>
int main()
{
int arr[3][4] = {0};
int *p = &arr[0][0];
int i = 0;
for(i=0; i<3*4; i++)
{
*(p+i)= i; (等价于arr[i] = i;)
}
for(i=0; i<3; i++)
{
int j = 0;
for(j=0; j<4; j++)
{
printf("%d ", arr[i][j]);
}
}
return 0;
}
五、数组的运算
&数组名——数组名表示整个数组,取出来的是数组的地址
sizeof(数组名)——数组名表示整个数组,求的是整个数组的大小
除此之外,所有的数组名都表示首元素的地址
1.一维数组
eg:
char arr[] = {'a','b','c','d','e','f'};
printf("%d\n", sizeof(arr)); // 6(字节)
printf("%d\n", sizeof(arr+0)); // 4
printf("%d\n", sizeof(*arr)); // 1
printf("%d\n", sizeof(arr[1])); // 1
printf("%d\n", sizeof(&arr)); // 4
printf("%d\n", sizeof(&arr+1)); // 4
printf("%d\n", sizeof(&arr[0]+1)); // 4
printf("%d\n", strlen(arr)); // 随机值
printf("%d\n", strlen(arr)); // 随机值
printf("%d\n", strlen(arr+0)); // 随机值
printf("%d\n", strlen(*arr)); // 代码错误
printf("%d\n", strlen(arr[1])); // 代码错误
printf("%d\n", strlen(&arr)); // 随机值
printf("%d\n", strlen(&arr+1)); // 随机值
printf("%d\n", strlen(&arr[0]+1)); // 随机值
2.二维数组
2.二维数组
eg:
int a[3][4] = {0};
printf("%d\n",sizeof(a)); // 48
printf("%d\n",sizeof(a)); // 48
printf("%d\n",sizeof(a[0][0])); // 4
printf("%d\n",sizeof(a[0])); // 16
printf("%d\n",sizeof(a[0]+1)); // 4
printf("%d\n",sizeof(a+1)); // 4
printf("%d\n",sizeof(&a[0]+1)); // 4
printf("%d\n",sizeof(*a)); // 16
printf("%d\n",sizeof(a[3])); // 16
六、数组作为函数参数
六、数组作为函数参数
获取数组的元素个数
eg: void bubble_sort(int arr[])
{
int sz = sizeof(arr)/sizeof(arr[0]); ——>(错误)
…
}
}
数组作为函数参数的时候,不会把整个数组的传递过去。实际上只是把数组的首元素的地址传递过去了。
即使在函数参数部分写成数组的形式: int arr[ ] 表示的依然是一个指针: int *arr 。
上面代码中的sz最后的值应该是1,而不是数组元素的个数。
阅读全文
0 0
- 对数组的简单总结
- 数组的简单总结
- 数组的简单总结
- 数组的简单总结
- 对指针、数组的总结
- php对数组排序的简单示例
- JS对数组的操作总结
- JQuery对数组的一些操作总结
- JQuery对数组的一些操作总结
- JQuery对数组的一些操作总结
- JQuery对数组的一些操作总结
- JQuery对数组的一些操作总结
- JQuery对数组的一些操作总结
- 对JavaScript 中数组用法的总结
- JQuery对数组的一些操作总结
- 对Sublime的一点简单的总结
- 对servlet结构的简单总结
- 对java基础的简单总结
- 385. Mini Parser
- POJ 3494(超时,和没超时的程序测试过,只差10%的速度,应该可以过的,不知道为什么过不了)
- Java基础--Collection方法
- php函数var_dump() 、print_r()、echo()
- 简图记录-ARM嵌入式基础(概念、工作模式、寄存器、寻址)
- 对数组的简单总结
- 关于springMVC中@ModelAttribute注解的隐含model属性名
- Threadlocal
- hdu1171 Big Event in HDU
- Java基础(集合卷)--List
- 机器学习_矩阵的l21范数/行稀疏/结构稀疏
- 神经网络中Epoch、Iteration、Batchsize相关理解和说明
- wpf绘制圆环,实现图片镂空
- httpd代理服务器和缓存学习