一维数组和二维数组知识点总结

一维数组和二维数组知识点总结

字符数据存储的基本知识

在这里插入图片描述

数组指针和指针数组的区别

数组指针:int(*p)【】,首先因为 *p放在括号内优先结合,所以先是一个指针,然后和【】起作用。
所以数组指针是指针,指向一个数组。
指针数组:int *p【】,首先【】的优先级高于 *
所以数组指针是数组,存的是指针。

&数组名和数组名的区别

arr和&arr的初始值一样但意义不同。
arr是首元素地址,+1只跳过一个元素,&arr是整个数组的地址,+1跳过整个数组。

例:
在这里插入图片描述
结果:
在这里插入图片描述
很明显看到arr+1只跳过了一个元素,儿&arr+1跳过整个数组差40。

一维数组传参

void test(int arr[])
void test(int *arr)
int mian()
{
	int arr[10] = {0};
	test(arr);
}

二维数组

int arr[3][5],这就是一个二维数组,表示该数组存的元素是3行5列。

注意:
1、二维数组的首元素是第一行,+1跳过一整行。不同于一维数组。
2、二维数组传参,函数的形参职能省略第一个【】中的数组,因为二维数组可以不知道有多少行,但是必须知道一行有多少个元素。

例:
int a [5] [10]
1.代表什么 2.类型是什么 ;+1加多少 3.sizeof()是多大

(类比一维数组)
a:
1’ 代表首元素地址(二维数组的首元素地址是第一行);
2. int(* ) [10], +1跳过一整行4*10=40;
3. sizeof数组名代表整个数组 =200

&a:
1’ 代表整个数组的地址
2 .int(*) [5][10]; +1跳过整个数组=200
4. a本来代表第一行的地址,但是有了&符号,降为第一行的首元素地址.所以为4

a[0]:

1’ 第一行的数组名
5. 因为代表的是第一行的数组名,所以相当于一维数组 int*类型 +1跳过4
6. 因为a[0]相当于第一行的数组名,所以sizeof数组名代表整个数组大小.4*10=40;

&a[0]
1’ 第一行数组的地址
2. 类型int(*)[10] ; 因为这是第一行数组的地址,所以+1相当于跳过第一行整个数组.所以+1跳40;
3’ a[0]代表第一行数组名,+&符号降为首元素,此时是第一行的首元素 ,所以sizeof只跳过4

二维数组传参

void function(int a[m][n]);//函数声明
void function(int a[][n]);//不论多少维数组,第一维都可省略
或者
void function(int(*a)【n】)//等同于上一个

3、在函数操控上

1.   *(a[i] + j)  //代表第 i 行 第 j 列
2.  *(*(a+i) + j) //同上
//**不管怎么样,a[i][j]不被允许**。也是由编译器的寻址方式决定。

指针和数组例题

题前知识:
sizeof知识点:
1、.注意:sizeof(),括号内仅有数组名字,求的是整个数组的大小
2、sizeof是测数组大小的,单位是字节
3、图中sizeof是静态运算符,括号内的i++是不执行的,所以i还是不变(刚开始i=10)

在这里插入图片描述

strlen知识点:
1、strlen()是计算字符串长度的。两个注意点 1.括号里面必须是地址 2.计算时以“\0”,为结束标志(注意是‘\0’或者0,不能是‘0’)
2、strlen是算几个是几个,遇到\0停止,但不算\0
3、strlen的括号内需要参数是地址,不能是具体的数字或值

在这里插入图片描述
.a是因为此时的a不符合上面的条件所以仅仅是首元素地址,加“”引用以后只引用首元素,所以4字节
.&+数组名字,虽然是求整个数组的地址,但不管是什么地址终究是地址,也只有4个字节
.没填的那个后面应该是16. 因为&a求的是整个数组的地址,而此时加“*”引用以后,求出来是整个数组的元素,所以是16.

在这里插入图片描述
1.数组名单独放到sizeof内,求数组总大小 6
2.数组名加0放sizeof内,降为首元素地址,+0还是首元素地址 4
3.*arr,此时arr降为首元素地址,引用以后是a ,因为是char型的。 1
4.b字符, 1
5.&arr,取的是arr数组整个的地址,地址为4 4
6.&arr+1取的是整个数组地址,+1跳到下个地址,但还是地址 4
7.&arr[0]+1,取a的地址+1,是b的地址但还是地址 4

在这里插入图片描述
1.arr为首元素地址(这不是在sizeof中无特殊含义),也是a的地址从a开始,但是没有\0作为停下标志,所以为。 随机值
2.arr+0同理是a的地址 。 随机值
3.*arr是取arr地址中的值,不是地址,所以是语法错误
4.arr【1】也是取的值,同理语法错误
5.&arr是整个数组的地址,但和a的地址相同停不下来所以 。 随机值
6.&arr+1是下个数组的地址。随机值
7.&arr【0】+1,从b的位置往后找 停不下来。 随机值

若改为char arr【】 = “abcdef”则答案为6 6 err err 6 随机值 5
注意:在此情况下的sizeof(arr) = 7. 因为arr在sizeof内部,代表整个数组,此时里面还有个\0所以是7.

在这里插入图片描述
1.p是指针存的是a的地址, 是地址 4
2.p+1是b的地址 4
3.p是a的地址,引用之后是a 1(指针不同于取地址,指针一般永远指向的是首元素地址)
4.取出a 1
5.&p是取出p的地址(存a地址所用空间的地址),还是地址 4
6.同理与5 ,不过跳过了p整个空间, 还是地址 4
7.取出a,然后求出a地址给地址+1,是b的地址 4

在这里插入图片描述
注意这里是strlen
1.p是地址指向a,从a开始\0结束 6
2.同理+1从b开始, 5
3.p存a的地址,引用以后是元素a,而strlen要的是地址,不符合语法 错误
4.同理3, 错误3
5.看大6,的右图,p是存放a地址的一个空间,而&p是取p空间的地址,里面什么东西不知道,随机值
6.同理5 随机值
7.取a地址+1,b的地址开始 5个

在这里插入图片描述
1.数组单独在sz内部,整个数组大小344 =48
2.a00取12个元素中的第一个元素,整形 4
3.a0是组成二维数组的一个一维数组块,相当于一个一维数组数组名,代表的是该一维数组的整个大小, 所以 16
4、难、同理于3,+1以后,a0不在代表一维数组的数组名字,降为一维数组的首元素地址,+1变成第二个元素,相当于a00后的a01的地址. 4
5.a+1,a降为首元素地址,但这是二维数组,首元素地址就是a0,也就是a0整个的地址,+1,跳过整个a0,但还是地址 4
6.a0是第一行,&取地址以后,是第一行的地址,+1成为第二行的地址。 也是地址 4
7.a没单独放,降为首元素地址<a0整个一行的地址>,*引用以后求的是整个第一行的所有元素大小, 16
8.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值