C / C ++中的数组讲解

原创 2017年06月05日 09:58:46

笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,已出版书籍:《手把手教你架构3D游戏引擎》电子工业出版社和《Unity3D实战核心技术详解》电子工业出版社等。

CSDN视频网址:http://edu.csdn.net/lecturer/144

数组是存储在连续内存位置的项的集合这个想法是将多个相同类型的项声明在一起。效果如下所示:

数组声明:

在C中,我们可以通过指定它的大小或通过初始化或者两者来声明数组。

// Array declaration by specifying size
int arr[10];
Run on IDE
// Array declaration by initializing elements 
int arr[] = {10, 20, 30, 40}
 
// Compiler creates an array of size 4. 
// above is same as  "int arr[4] = {10, 20, 30, 40}"
Run on IDE
// Array declaration by specifying size and initializing 
// elements 
int arr[6] = {10, 20, 30, 40}

访问数组元素:

使用整数索引来访问数组元素 数组索引从0开始,直到数组的大小减去1.以下是几个例子。

int main()
{
  int arr[5];
  arr[0] = 5;
  arr[2] = -10;
  arr[3/2] = 2; // this is same as arr[1] = 2
  arr[3] = arr[0];
 
  printf("%d %d %d %d", arr[0], arr[1], arr[2], arr[3]);
 
  return 0;
}

Output:

5 2 -10 5

无索引越界检查:

C中没有任何索引不合格检查,例如以下程序编译正常,但运行时可能会产生意外的输出。

int main()
{
  int arr[2];
 
  printf("%d ", arr[3]);
  printf("%d ", arr[-2]);
 
  return 0;
}

此外,在C中,初始化具有指定大小的元素的数组不是编译器错误, 例如下面的程序编译好。

int main()
{
 
  // Array declaration by initializing it with more
  // elements than specified size.
  int arr[2] = {10, 20, 30, 40, 50};
 
  return 0;
}
该程序用C ++编译不能通过, 如果我们将上述程序保存为.cpp,程序将生成编译器错误“错误:'int [2]'的初始化程序太多

再给读者显示一下数组元素存储在连续的位置代码展示:

int main()
{
  // an array of 10 integers.  If arr[0] is stored at
  // address x, then arr[1] is stored at x + sizeof(int)
  // arr[2] is stored at x + sizeof(int) + sizeof(int)
  // and so on.
  int arr[5], i;
 
  printf("Size of integer in this compiler is %u\n", sizeof(int));
 
  for (i=0; i<5; i++)
    // The use of '&' before a variable name, yields
    // address of variable.
    printf("Address arr[%d] is %u\n", i, &arr[i]);
 
  return 0;
}

Output:

Size of integer in this compiler is 4
Address arr[0] is 2686728
Address arr[1] is 2686732
Address arr[2] is 2686736
Address arr[3] is 2686740
Address arr[4] is 2686744
这些都是程序运行的一些小技术点,希望对读者有所帮组。。。。。。。



版权声明:本文为博主原创文章,未经博主允许不得转载。

折半查找用简单的C语言编写

代码如下:#include void search(int arr[],int left,int right,int num) { int mid=0; while(left>1); i...
  • chenkaixin_1024
  • chenkaixin_1024
  • 2016年10月14日 17:35
  • 303

70 对C语言数组的总结以及实例讲解

对C语言数组的总结以及实例讲解
  • czg13548930186
  • czg13548930186
  • 2017年06月03日 14:20
  • 1116

C和JAVA中数组的区别

看一个小例子: 代码1(C) #include int main(void) {     int i = 0;     int num = 3;     //int a[3] = {1,2,4};...
  • cleanness
  • cleanness
  • 2013年07月15日 22:18
  • 1196

C 删除一个数组中重复的元素

删除一个数组中重复的元素。例如 : input : 1,2, 2,2,3,3,3,4,4,5,5,5,6,6,6 output: 1,2,3,4,5,6实现代码:#include #incl...
  • y396397735
  • y396397735
  • 2016年01月08日 18:50
  • 4518

java和c、c++中数组的区别

在c、c++中使用数组是很危险的,因为c和c++中的数组就是内存块。如果一个程序要访问其自身内存块之外的数组,或在数组初始化之前使用内存(程序中常见的错误),就会产生难以预料的后果。 jav...
  • u011514810
  • u011514810
  • 2016年08月29日 10:18
  • 737

《C语言及程序设计》实践参考——删除数组元素

返回:贺老师课程教学链接  项目要求【项目2 - 删除数组元素】del函数的作用是删除数组a中的指定元素x,n为数组a的元素个数。函数的返回值,为删除元素后的有效元素个数(数组中可能有重复元素)。函数...
  • sxhelijian
  • sxhelijian
  • 2015年05月01日 07:40
  • 8106

45 C语言缓冲区(缓存)详解

C语言缓冲区(缓存)详解
  • czg13548930186
  • czg13548930186
  • 2017年06月02日 14:02
  • 1178

C数组与java数组在内存中的区别

C数组:静态数组,数组一旦被定义后,占用的内存空间就是固定的,不能改变数组长度。 C有两个版本,C89和C99 在C89中,必须使用数值常量指明数组的长度,不能使用变量(不管变量有没有被初始化); 在...
  • ganxiaojieke
  • ganxiaojieke
  • 2017年09月14日 17:21
  • 228

(九)C语言数组的取值,取地址。

有最常见的根据索引取值,与java相同。以及最常见的通过&符号取地址的值。 也有其他取地址的值得方式。值得注意的是,我们上边通过取出地址,直接通过 * 进行指针运算,便可以得到对应的值。 这里可以...
  • sinat_31311947
  • sinat_31311947
  • 2016年12月22日 10:59
  • 1767

C语言数组基本知识点详解

数组基本知识点: 1,数组
  • wu5215080
  • wu5215080
  • 2014年05月11日 22:41
  • 3849
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C / C ++中的数组讲解
举报原因:
原因补充:

(最多只允许输入30个字)