一 sizeof和strlen的对⽐
1.1 sizeof是计算变量所占内存空间大小的操作符,但是不会将数据进行计算(这点后面还会用到),如下方打印a是没有将b+c作为a的结果。
二 在一维数组上的用法
sizeof(下面数字表示行数)
7.数组名a单独放入sizeof中,则表明计算数组的大小,由于int是整型占四个字节所以是4*4=16
8.不是单独放入sizeof中,a+0表示数组首元素地址,在X64环境下是8,X86环境下是4.
9.*a表示对a解引用,此时表示的是首元素,占4个字节所以是4
10.a+1表示跳过了该数组,取其之后的地址,但还是地址所以在X64环境下是8,X86环境下是4.
11.表示第二个元素,为4.
12.取数组的地址,与第10条一样.
13.取地址之后解引用相互抵消,与第七条一样.
14.取数组的地址,然后+1表示跳过整个数组(可以理解为把数组的地址当成一个整体)。
15.取得是第一个元素的地址,与10一样。
16.取得是第一个元素的地址,再加一也就是第二个元素的地址,之后与10一样。
ps:如果是字符数组的话,只是将占4个字节改成1个字节其余变化不大.并且如果是
这种形式则要多计入一个\0考虑
三 在二维数组上的运用
二维数组与一维数组差别不大
7.单独放入表示计算整个数组,3*4*4=48.
8.单独放入表示第一行第一个元素,为4.
9.单独放入表示第一行所有元素,为16
10.不是单独放入则a[0]表示&a[0][0],在加1表示第一行第二个元素的地址,在X64环境下是8,X86环境下是4.
11.在10的基础上解引用表示第一行第二个元素为4
12.不是单独放入则a表示&a[0],表示第一行地址在加1表示第二行地址,剩下与10一样.
13.在12基础上解引用表示第二行元素,结果为4*4=16.
14.取第一行地址加1,表示取第二行的元素的地址,剩下与10一样.
15.在14基础上解引用表示第二行元素,4*4=16.
16.*a=*(a+0)=a[0]所以表示第一行元素.
17.这里表示的是取第四行元素的地址,但我们所给的数组中没有第四行,这是因为sizeof不会对数据进行访问,不会对其进行计算,它相当于默认有第四行且列数不变所以输出16.
这是结果.