说到数组,基本上就离不开指针,数组只不过是一堆按照顺序依次排放的同样属性的数据,这样规律排放的数据就可以用指针轻易找到;
注意,这里要注意好几个关键点
1 :按照顺序
2:依靠指针访问
3:同样的类型
数组的数组名其实就是指针,数组就是根据指针来访问数组内部的数据的;
那么,就看看今天我看到的这个问题
首先,我们来看到第一条
如果AI没有胡言乱语的话,咱们的答案就是16,这是数组的大小。因为这里我们是把数组名放进去了。
那么,再来看第二个
这里就需要注意运算的顺序了,首先我们要计算a+0,但是,a+0到底是什么?
首先,a是什么?a在里面表示的是数组首元素的地址,毕竟a[i]==*(a+i)对不对,所以这个输出的是4,也就是数组首元素的地址!
注意是地址!这个地址的大小要看电脑的!不同的环境下面的大小不一样,32位的环境下面指针的大小是4B,但是64位机器是8B
再来,我们看第三个
这个很简单,首先,这个a是数组首元素的地址,那么*a当然就是a[0],所以还是4
第四个
和上面一样,地址加一就等于&a[1],这边输出的还是4,地址的大小;
第五个
这个更简单了,把一个int型放进去当然是4了(也要看环境)
第六个
这里是这样的,这里非常关键:&a到底是什么意思?
这里就提到什么叫数组指针;
int arr[5] = {1, 2, 3, 4, 5}; // 定义一个包含5个整数的数组
int (*p)[5] = &arr; // 定义一个指向该数组的指针
数组指针就是说,有一个指针,它直接指向整个数组,注意,是指针指向整个数组,
于是乎,&a就是取出来整个数组的地址,但是,地址就是地址,管你指向谁,所以还是4
第七个
首先,其实我们看,对一个东西先取地址再解引用不就等于什么都没做吗?所以这里当然输出16
第八个
这里首先是取出整个数组的地址,然后加一,也就是跳转了整个数组。但是!!!这里没有解引用 啊,所以还是地址,所以,还是输出4
第七个
这里是对一个整型变量取地址当然也是输出4
最后
你看,先取地址再加一,还是地址,所以还是4
另外,还有一个小问题
这是多少??
这里,我们取整个数组的地址,然后加一,然后问题来了,这个地址所指向的大小是多少???
很简单
int 指针加一跳转4
char 指针加一跳 1
数组指针跳整个数组的大小,由于依然是一个数组指针,计算机会以为后面也是个数组,所以对这个地址解引用就会得到一个新的数组(当然,这妥妥的非法访问),所以,输出16
具体的内容可以参考这里
个人认为这课程的质量不说是最好的,但最起码是最适合普通人的。