网站首页 > 精选教程 正文
今天,来跟大家聊一聊C语言中的数组。
数组的定义
数组是一种在内存中连续存储的数据集合,集合中的数据具有相同的类型。
这些数据通过他们共用的数组名加各自的索引值进行读取/存储。
数组的声明
语法 :typename array_name[array_size];
int intArray[ 10 ];
float floatArray[ 1000 ];
int tableArray[ 3 ][ 5 ]; /* 3 行,5列 */
const int NROWS = 100;
float matrix[ NROWS ][ NCOLS ];
// C99
int numElements;
printf( "How big an array do you want? " );
scanf( "%d", &numElements; )
if( numElements <= 0 ) {
printf( "Error - Quitting\n" );
exit( 0 );
}
double data[ numElements ]; // This only works in C99, not in plain C
数组的初始化
typename array_name[array_size] = { init_data };
int intArray[ 6 ] = { 1, 2, 3, 4, 5, 6 };
float floatArray[ 100 ] = { 1.0f, 5.0f, 20.0f };
double piFractions[ ] = { 3.141592654, 1.570796327, 0.785398163 };
// 二维数组
int a[ 2 ][ 3 ] = { { 5, 6, 7 }, { 10, 20, 30 } };
// 三维数组
int b[ 2 ][ 3 ][4] = {
{ {5,6,7,8},
{6,7,8,9},
{7,8,9,10} },
{ {8,9,10,11},
{9,10,11,12},
{10,11,12,13} }
};
// C99 :支持对某一个特定的元素进行初始化
int numbers[ 100 ] = { 1, 2, 3, [10] = 10, 11, 12, [60] = 50, [42] = 420 };
// 这样子赋值,能够保证数组的所有元素都被赋值为0x00
int intArray[5] = { };
for(int i=0; i<5; i++)
{
printf("intArray[%d] = %d\n", i,intArray[i]);
}
Output:
intArray[0] = 0
intArray[1] = 0
intArray[2] = 0
intArray[3] = 0
intArray[4] = 0
// 但如果是,int intArray[x] = { 1 }; 呢?
// 编译器只会把第一个元素赋值为1
int intArray[5] = {1 };
for(int i=0; i<5; i++)
{
printf("intArray[%d] = %d\n", i,intArray[i]);
}
Output:
intArray[0] = 1
intArray[1] = 0
intArray[2] = 0
intArray[3] = 0
intArray[4] = 0
数组的操作
数组在内存中连续存储这一特性,让数组名和指针之前的界限非常模糊。也正因为这一特点,决定了程序员能够对数组所进行的操作。
// 我们现便利输出我们的数组
int intArray[ 6 ] = { 1, 2, 3, 4, 5, 6 };
printf("intArray : ");
for(int i=0; i<6; i++)
{
printf("%d ", intArray[i]);
}
printf("\n");
// 数组名在某些场合是可以当作指针来用的
// 下面的两次输出内容是一样的
printf("IntArray[3] = %d\n", *(intArray+3));
int *pIntArray = intArray;
printf("pIntArray[3] = %d\n", *(pIntArray+3));
// 计算数组的内存大小
// 下面的代码会输出24,因为int型占4个字节,整个数组占24个字节
printf("sizeof intArray = %lu\n", sizeof intArray);
// 而我们如果用同样的方法打印一个指向这个数组的指针呢?
// 结果取决于当前机器的字长,64位机器结果是8,32位机器结果是4
// 记住,这就是数组名和指针的区别。
printf("sizeof pIntArray = %lu\n", sizeof pIntArray);
// 计算数组有多少个元素
// 计算结果就是6
printf(" intArray count = %lu\n", sizeof(intArray)/sizeof(int));
// 二维数组
// 上面的例子说明了,intArray+3 等于 intArray[3]
// 那么对于二维数组呢? 下面的 a + 2 等于什么?
// 我是这样理解的,a是一个二维数组,它同时也是一个一位数组
// 这个一维数组的成员是另外两个一维数组
int a[ 2 ][ 3 ] = { { 5, 6, 7 }, { 10, 20, 30 } };
// 下面的代码输出 : size of a[1] = 12
// 正好是一个有三个元素的一维数组的大小
printf("size of a[1] = %d \n", sizeof (a[1]));
以上,就是今天要和大家分享的内容。希望对大家有所帮助。
猜你喜欢
- 2024-11-16 面向JVM编译-类实例、数组的创建和使用
- 2024-11-16 来,一起聊聊Excel中的数组(excel数组公式有哪些)
- 2024-11-16 数组的维数及数组公式的讲解(数组维的大小)
- 2024-11-16 C语言中数组的类型和使用(c语言中数组的概念及作用)
- 2024-11-16 C# - 多维与交错数组 036(交错数组和多维数组有何区别?)
- 2024-11-16 Numpy第6练:如何操控数组的维度与形状?干货满满!
- 2024-11-16 NumPy之:多维数组中的线性代数(numpy 多维数组)
- 2024-11-16 S7-1200 数组数据类型(ARRAY)(s71200plc数据类型)
- 2024-11-16 JAVA中如何调用matlab并返回运算结果?
- 2024-11-16 Java基础03(java基础案例教程第二版)
你 发表评论:
欢迎- 04-11Java面试“字符串三兄弟”String、StringBuilder、StringBuffer
- 04-11Java中你知道几种从字符串中找指定的字符的数量
- 04-11探秘Java面试中问的最多的String、StringBuffer、StringBuilder
- 04-11Python字符串详解与示例(python字符串的常见操作)
- 04-11java正则-取出指定字符串之间的内容
- 04-11String s1 = new String("abc");这句话创建了几个字符串对象?
- 04-11java判断字符串中是否包含某个字符
- 04-11关于java开发中正确的发牌逻辑编写规范
- 最近发表
-
- Java面试“字符串三兄弟”String、StringBuilder、StringBuffer
- Java中你知道几种从字符串中找指定的字符的数量
- 探秘Java面试中问的最多的String、StringBuffer、StringBuilder
- Python字符串详解与示例(python字符串的常见操作)
- java正则-取出指定字符串之间的内容
- String s1 = new String("abc");这句话创建了几个字符串对象?
- java判断字符串中是否包含某个字符
- 关于java开发中正确的发牌逻辑编写规范
- windows、linux如何后台运行jar(并且显示进程名)
- 腾讯大佬私人收藏,GitHub上最受欢迎的100个JAVA库,值得学习
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)