C语言之数组与指针(一)

---恢复内容开始---

数组:内存连续的,同类型元素的集合;

从最基础的数组声明,数组初始化,数组赋值,数组遍历,到二维数组,再到指针数组,数组指针,以及数组和指针关系无疑都证明了数组在c语言中的重要地位;我们将一 一对其说明。

1.数组声明:float a[size] ; int b[size]; char c[size];(size是数组元素个数,必须为正整数 ; #define  size 10   )

这样我们就声明了一个数组;但是在下面代码中我们可以看出了一个问题:没有初始化的数组中存储的是一些我们并不其意义的数据;所以某些时候初始化就显得尤为重要了。

           

2.数组初始化:主要有四种:

(1)一 一初始化,对数组每个元素都一 一赋值  int a[size] = {1,2,3,4,5,6,7,8,9,0};数组遍历的结果也是一 一对应;

(2)部分赋值, 对数组的部分元素赋值, int a[size] = {1,2,3}; 前三个元素一 一对应,后7个则都会被默认为 0 ;

(3)指定元素赋值,这种赋值方式有一定的偏重性,对重要的元素进行指定赋值 ,int a[size] = {[3]=4,2,[7]=10,3};遍历的结果为{0,0,0,4,2,0,0,10,3,0}; (由初始化器完成的)

(4)直接全部清零, int a[size] = {0};   遍历结果的所有元素都为零 ,字符型的都为NULL;还有一种特殊的,不安全的初始化方式: int a[] = {1,1,1,1,1} ; 系统自动计数,默认其有五个元素,多用于字符数组int b[] = {1,2,3};(最好不用)

*  值得注意的是const修饰的只读数组只能初始化,而不能赋值;

              

3.数组赋值: 很多人认为初始化和赋值是相同操作,没有区别;但是通过const修饰的数组的实例可以看出初始化和赋值就存在着显而易见的区别;那就是时间上的差异,初始化是在系统分配资源的时候完成的,赋值则是在运行过程中对数据的后来操作。

需要注意的几点:

(1)数组不能像初始化一样用花括号赋值;

(2)数组赋值不能越界,例如:int a[10] ,我们对他赋值是只能对下标为0—9的元素进行赋值,其他的赋值都为越界,是对操作系统的“冒犯”。这也是初始化时我们要指定数组大小的原因,完全是方便程序员的操作,由系统自己计数则很容易越界。

(3)不能以数组为单位赋值,赋值只能是以元素为单位进行的。

4.数组遍历: 通过一层for循环完成,循环次数为元素个数(0到size-1)。

5.二维数组及多维数组: 上面我们说了,数组的元素可以为任何数据类型,那么它的元素为一个数组也是顺理成章的事了,这样我们就可以通过数组的数组“仿真”出一个二维的或者多位的数组,这也是很多人怀疑多维数组是否存在的原因。但是换句话说数组的简单的数学模型实现也是C语言的亮点所在。

声明:int A [i][j]; char C[i][j][k];

初始化:int B [2][3]={{0,2,4},{1,3,5}};或者: int B [2][3]= {0,2,4,1,3,5};同时它也遵循普通数组的初始化方式。

遍历:由数组的维度决定,几维数组就需要几层循环去遍历。

      

  

       

---恢复内容结束---

时间: 2024-10-12 11:45:09

C语言之数组与指针(一)的相关文章

C语言关于数组与指针内容小结

数组的基本概念 什么是数组:数组就是:数组是相同类型的元素的一个集合       类型说明符 数组名 [常量表达式]: 其中,类型说明符是任一种基本数据类型或构造数据类型.数组名是用户定义的数组标识符.方括号中的常量表达式表示数据元素的个数,也称为数组的长度.例如: int a[10]; /* 说明整型数组a,有10个元素 */ float b[10], c[20]; /* 说明实型数组b,有10个元素,实型数组c,有20个元素 */ char ch[20]; /* 说明字符数组ch,有20个元

C语言中数组与指针

数组是内存空间的一片连续的区域,用于存贮一组相同数据类型元素的集合. 指针变量中存放的是变量的地址,通过指针取得地址,再通过地址提取数据. 在大多是C语言书中,都有这样的说法,“数组和指针是相同的”.其实,数组与指针,只能在特定的情况下才是相同的,在大多书情况下,他们并不相同. C语言中每个表示变量的符号都代表一个地址,而每个变量的值就是该地址里所存储的内容. 定义一个字符数组 char a[]="asdfghjkl";现在来访问第i个字符a[i],编译器符号表中具有一个符号,它代表的

深刻理解C语言:数组和指针

参考<C专家编程>的下列章节: 第4章 令人震惊的事实:数组和指针并不相同 第9章 再论数组 第10章 再论指针 数组名的理解: int a[10]; 1. a代表指向第一个数组元素的指针.做函数形参时,在表达式中时. 2. a看成一个整体.a的数据类型是int[10].因此a取地址后加一的步长为40 视频参考: 指针及指针操作 数组 高级指针.C.面向对象

c语言,数组和指针

概要: 1.普通数组与指针 2.数组指针 3.指针的数组 数组是一个由(同一类型)连续元素组成的预先分配的内存块:指针是一个对任何位置的元素的引用. 数组自动分配空间,但不能重分配或改变大小:指针必须被赋值以指向分配的空间,可以随意重新赋值. 指针可以模拟数组:几乎没有所谓数组的东西,实际是个指针操作符. 1.普通数组和指针 #include <stdio.h> int main() { int arry[10]; int *p=arry; arry[1]=100; printf("

c语言中数组,指针数组,数组指针,二维数组指针

1.数组和指针 int array[5] = {1,2,3,4,5};// 定义数组 // 1. 指针和数组的关系 int * pa = array; pa = array; // p[0] == *(p+0) == array[0] == *(array+0) printf("%p\n", pa); printf("%p\n", array); /* 访问数组两种方式 1. 下标法访问 数组名[下标] 指针[下标] 下标:偏移量 2. 指针法访问 *(p+1) *

c语言字符数组和指针的经典用法

1.字符数组 许多情况下,对字符串的处理使用字符数组会更加方便,比如: 我觉得不改变字符串的原有顺序,对字符串进行删除等操作时,使用字符数组效果会更好. eg:给定字符串(ASCII码0-255)数组,请在不开辟额外空间的情况下删除开始和结尾处的空格,并将中间的多个连续的空格合并成一个.例如:"   i    am a      little boy.    ",变成"i am a little boy",语言不限,但不要用伪代码作答. answer: #inclu

由strcat函数引发的C语言中数组和指针问题的思考

问题一 首先,来看一下下面这段代码: #include <stdio.h> #include <string.h> int main() { char *str = "media"; char *tmp = "aaa"; printf("str: %s\n",str); strcat(str,tmp); printf("str: %s\n",str); return 0; } 代码打眼儿一看,功能很明显

读陈浩的《C语言结构体里的成员数组和指针》总结,零长度数组

原文链接:C语言结构体里的成员数组和指针 复制如下: 单看这文章的标题,你可能会觉得好像没什么意思.你先别下这个结论,相信这篇文章会对你理解C语言有帮助.这篇文章产生的背景是在微博上,看到@Laruence同学出了一个关于C语言的题,微博链接.微博截图如下.我觉得好多人对这段代码的理解还不够深入,所以写下了这篇文章. 为了方便你把代码copy过去编译和调试,我把代码列在下面: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 #include <stdio.h>

程序猿之--C语言细节13(二维数组和指针,&amp;*a[i][0]的理解,数组1[e]和e[1]很可能你没见过)

主要内容:二维数组和指针,&*a[i][0]的理解.数组1[e]和e[1] #include <stdio.h> #define NUM_ROWS 10 #define NUM_COLS 10 int main(int argc, char **argv) {     int a[NUM_ROWS][NUM_COLS], *p, i = 0; // a理解为指向整数指针的指针 即int **     int c, d=2,*test, e[2] = {4,5},f[2][2] = {{