LinuxC数组与指针

数组:

一维数组

数据类型 数组名【常量表达式(数组长度)】={值,值2,……};

例:int a[5]={1,2,3,4,5,};

二维数组

数据类型 数组名【数组长度】【数组长度】={{值,值,……},{},{}};

例:int a[5][3]={{1,2,3},{4,5,6},{7,8,9},{10,11,12},{13,14,15}};

也可以这样写系统会自动根据你所输入的数组长度进行排序

 Inta[5][3]={12,3,4,5,6,7,8,9,10,11,12,13,14,15};

还可以这样写,如果你给的值在末尾是0可省略不写,但是在开头或中间必须写

Int a[5][3]={{1},{1,0,1},{1,2},{0,1,2},{123}};

如定义成int a[][3]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};  系统会自动分成5组。

如定义成 int a[][3]={1,2,3,4,5,6,7,8,9,10,11,12,13};系统还会自动分成五组,

缺失的系统将会自动补成0;

多维数组:

数据类型数组名 【数组长度】【数组长度】【数组长度】……={{{{},……},{},{},……},……}

字符数组:

用来存放字符量的数组称字符数组;

 LinuxC数组与指针

我们常用的是第三种

指针:

LinuxC数组与指针

注意:*在声明变量时代表指针,在使用时代表取值,在输出是没有*代表取地址。

写个例子:                                                               结果:

LinuxC数组与指针      LinuxC数组与指针

 这个时候解析下上面这个例子

输出的第一行数据:它是由*p1指向i的地址,*p2指向j的地址   图解     LinuxC数组与指针

输出的第二行数据:此时i存储地址数据修改及*p1的数据被修改,j的存储数据未被修改及*p2的数据未被修改  图解      LinuxC数组与指针

输出的第三行数据:此时p2的地址指向p1的地址,所以*p2的值是i的值  图解     LinuxC数组与指针

输出的第四行数据:i的值变了,但p1p2指向的地址还是i ,所以*p1,*p2的值是i的值  图解  LinuxC数组与指针

   再举个例子,将两个值转换

LinuxC数组与指针       LinuxC数组与指针

上面图片的输出结果不是我们所需要的,错的原因在定义的传递方法里我们传递的是只是值,在我们运行时啊a,b值确实互相传递,但这个地址没有改变i所对的地址的值还是10,j还是20。下面我们用指针传递

LinuxC数组与指针    LinuxC数组与指针

此时我们可以看到i的值,j的值已经变了