C基础补漏---0001数组

数组名是一个指针常量

来源:C和指针

一维数组

1)&ints 是整个数组的首地址 &ints[0]是取指向数组第一个元素的指针 ,虽然两者都是一样的地址,但意义不一样
2) 数组:ints[n]为值
3) *指针 ip[4] = (ip+4)

int a[10];
int b[10];
c= &a;[0] => c =a
a=c; //不合法 ==>左值是要值而不是地址
b=a //不合法
b[3] = *(b+3)

ints[0] = *ints =10
&ints[0] = 100 //一个指向数组第一个元素的指针
ints[4]= (ints +4)=50
&ints = 100 // &ints 是整个数组的首地址
2[ints] = (2+(int)) =ints[0+2]
ip[0] =
(ints+3) =ints[3]
假定 ints数组在内存中的起始位置是100,整形值和指针的长度都是4个字节
int ints[20] = {10,20,30,40,50,60,70,80,90,100,110,120,130,140,150,160,170,180,190,200}
int ip = ints+3

ints = 100 // ints数组首地址为指针
ints[4] = 50 // ==》
(ints + 4)
ints +4 = 116 // 100(地址) +4x4
ints+4 =14 //10+4
(ints+4) =50 // ==》 ints[4] //50
ints[-2] =//illegal
&ints =100 //取整个数组的首地址
&ints[4] =116 //100+4
4
&ints+4 =116 //&ints[4] = &ints + 4
int的长度
&ints[-2] =//illegal //未知
ip =112 //ip是指针,ip是值:100+34
ip[4] = 80 // ip是指针 ip[4]=
(ip+4) =
(ins+3+4)
ip+4 = 128 //=100+(3+4)*4
*ip+4 =44 //
*(ip+4) =80 //
ip[-2] =20
&ip =//illegal
&ip[4] =128
&ip+4 =//illegal
&ip[-2] =104

**

字符数组的初始化

**
char message[] = “Hello”; //字符数组初始化
char *message = “Hello” //字符串初始化

多维数组

int a;
int b[10];
int c[6][10];
ine e[3][6][10];
==>a 是一个常量
==》b是一个向量,包含10个整形元素
==>c是一个包含6个元素的向量,每一个元素本身是10个整形元素的向量
》d是一个包含3个元素的向量,每一个元素都是6个元素的数组,每一个数组有10个int变量
在C中多维数组的元素存储顺序安装最右边的下标率先变化的原则
int matrix[3][10];
>matrix 是一个指向包含10个整形元素的数组的指针
matrix +1 》 *(matrix + 1)》 matrix[0+1][];
(matrix+1)+5 ===》matrix[1][5]
(
(matrix +1)+5)
右值(=号右边):获得 matrix[1][5] 这个数值
左值:matrix[1][5] 上的值将会被替换

声明指向多维数组的指针
int vector[10] , *vp=vector; //合法,为一个整形数组分配内存,并把vp声明为一个指向整形的指针
int matrix[3][10],*mp =matrix; //illegal ,虽然成功创建了matrix数组,但是声明了mp为一个指向整形的指针,实质要的是,指向整形数组的指针
int mater[3][10] ; int [p][10]=matrix; p是一个指向拥有10个整形元素的数组的指针 p+1 ==》 p+110==》指针一行一行地在matrix中移动
int *pi =&matrix[0][0];
int *pi= matrix[0] // 一个指针逐个访问整形元素

多维数组参数原型
viod func2(int *(mat)[10]) ==》指向整形数组的指针
void fun2(int mat[] [10]) ==》指向整形数组的指针
void fun2(**mat) //illegal 指向整形指针的指针
多维数组中只有第一维才能根据初始化列表缺省提供
int two_dim[][5] ={
{00,01,02),
{10,11},
{20,21,22,23}
}
可知最左边一维为3
00 ,01,02,00,00,
10,11,00,00,00,
20,21,22,23,00,

int array[4][2];假定数组的起始位置为1000,整形值在内存中占据2给字节空间
array 1000 //array是一个指向2个整形元素的数组的指针 array是指地址
array+2 1008 //1000 +22(列)2展字节数
array[3] 1012 //1000 +3
2
2
array[2]-1 1004 //array[1] 1000+ 122
array[2][0] 1008 // 1000 +222

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值