C-数组

作者: 小石头呢 | 来源:发表于2019-08-02 10:18 被阅读0次

数组可以存储一个固定大小的相同类型元素的集合;所有数组都是由连续的内存位置组成;最低的地址对应第一个元素;最高的地址对应最后一个元素。

一.声明数组

type arrayName [ arraySize ];

声明一个数组,需要指定元素的类型和元素的数量

二.初始化数组

可以逐个初始化数组,也可以使用一个初始化语句

三.初始化,定义例子

//初始化里面确定数组大小
int num[4] = {};

//在定义时明确指定数组的大小
int num[4] = {1,2,3,4};

//在定义时明确指定大小,并且初始化部分数据
//剩余的数据一般初始化为对应的数据类型的默认值
int num[4] = {1,2};

四.访问方式

  • 数组单元个数可以使用 sizeof(数组名)/sizeof(数组内元素数据类型)

  • 下标访问,num[i]

  • 指针访问,*(num+i*4)或者*(num+4)(编译器会自动处理)

  • 数组的数组名表示的是:数组的首地址

  • (num+i*4)表示访问num内第i个元素在内存里面的起始地址

  • *(num+i*4)访问第i个元素的值

五.多维数组

声明:type name[size1][size2]...[sizeN];

二维数组

多维数组最简单的形式是二维数组。一个二维数组,在本质上,是一个一维数组的列表。声明一个 x 行 y 列的二维整型数组,形式如下:

type arrayName [ x ][ y ];

一个二维数组可以被认为是一个带有 x 行和 y >列的表格。下面是一个二维数组,包含 3 行和 4 列:


int x[3][4]

初始化二维数组

多维数组可以通过在括号内为每行指定值来进行初始化

int a[3][4] = {  
   {0, 1, 2, 3} ,   /*  初始化索引号为 0 的行 */
   {4, 5, 6, 7} ,   /*  初始化索引号为 1 的行 */
   {8, 9, 10, 11}   /*  初始化索引号为 2 的行 */
};

内部嵌套的括号是可选的,下面的初始化与上面是等同的:

int a[3][4] = {0,1,2,3,4,5,6,7,8,9,10,11};

六.传递数组给函数

对形参的改变会影响到实参,因为传递的是数组的首地址

三种方式声明一维数组形式参数:

  • 形式参数是一个指针
void myFunction(int *param){

}
  • 形式参数是一个已定义大小的数组
void myFunction(int param[10]){

}
  • 形式参数是一个未定义大小的数组
void myFunction(int param[]){
   //就函数而言,数组的长度是无关紧要的
   //因为 C 不会对形式参数执行边界检查
}

七.从函数返回数组

  • C 语言不允许返回一个完整的数组作为函数的参数。但是,您可以通过指定不带索引的数组名来返回一个指向数组的指针。

  • 如果您想要从函数返回一个一维数组,您必须声明一个返回指针的函数.

  • C 不支持在函数外返回局部变量的地址,除非定义局部变量为 static 变量。

  • 实际例子:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

//计算机并不能产生真正的随机数
//而是已经编写好的一些无规则排列的数字存储在电脑里
//把这些数字划分为若干相等的N份
//并为每份加上一个编号用srand()函数获取这个编号
//然后rand()就按顺序获取这些数字,当srand()的参数值固定的时候
//rand()获得的数也是固定的,所以一般srand的参数用time(NULL)
//因为系统的时间一直在变
//所以rand()获得的数也就一直在变,相当于是随机数了。
 
/* 要生成和返回随机数的函数 */
int * getRandom( ){
  static int  r[10];
  int i;
 
  /* 设置种子 */
  srand( (unsigned)time( NULL ) );
  for ( i = 0; i < 10; ++i)
  {
     r[i] = rand();
     printf( "r[%d] = %d\n", i, r[i]);
 
  }
 
  return r;
}
 
/* 要调用上面定义函数的主函数 */
int main (){
   /* 一个指向整数的指针 */
   int *p;
   int i;
 
   p = getRandom();
   for ( i = 0; i < 10; i++ )
   {
       printf( "*(p + %d) : %d\n", i, *(p + i));
   }
 
   return 0;
}

相关文章

  • C-数组

    数组可以存储一个固定大小的相同类型元素的集合;所有数组都是由连续的内存位置组成;最低的地址对应第一个元素;最高的地...

  • C-数组篇(一维数组-上)

    数组,相信大家都使用过。本文将由浅入深的讨论数组,探索一些更高级的数组话题,如多维数组、数组与指针及数组的初始化等...

  • C-数组篇(一维数组-下)

    紧接着上篇,继续来讲讲C中的数组。 6.作为函数参数的数组名 当一个数组名作为函数参数传递给一个函数时会发生什么情...

  • 0015-三数之和

    三数之和 方案一 基于两数之和计算如果nums[i] > 0则不需要管后面 C-源代码 方案二 对原数组进行排序,...

  • leetcode3M无重复字符的最长子串

    思路: 1. 用一个int[26]的数组记录信息,出现过则索引为c-'a'的那一项置为1; 错误:(1)并不是只有...

  • 一分钟技能

    Recognize these scenarios? When Sally got a C- on a test,...

  • 数据结构C-数组-顺序表(三)

    数据结构中有一种结构叫顺序结构,这种结构的数据在内存中是连续的。 其实这种结构就是数组。我们都知道,当你创建一个数...

  • 反转一个链表的思路

    输入:A->B->C->D->E->NULL 输出:E->D->C->B->A->NULL 第一种使用while循...

  • iOS NavigationController栈跳转

    3种跳转方式 a->b->c-> 实现c->a 1.通过修改导航栈来跳转 先修改栈再pop 2.通过popT...

  • 2018-07-31spring cloud

    组合注解 @SpringCloudApplication eureka 高可用 a->b->c->....->a ...

网友评论

      本文标题:C-数组

      本文链接:https://www.haomeiwen.com/subject/olfcdctx.html