终于到第二篇指针文章了!!
一数组名的理解
我们来定义指针变量p1和p2来把arr和arr[0]的地址打印出来发现都一样。
在进行指针的加法,发现跳过的是住在组中一个元素的字节。
由此可以推断出数组名就是数组首元素的地址。
但还是有两个例外 1.sizeof(数组名),sizeof中单独放数组名,这⾥的数组名表⽰整个数组,计算的是整个数组的⼤⼩, 单位是字节 2.&数组名,这⾥的数组名表⽰整个数组,取出的是整个数组的地址(整个数组的地址和数组⾸元素 的地址是有区别的) 除此之外,任何地⽅使⽤数组名,数组名都表⽰⾸元素的地址。
二⼀维数组传参的本质
此处形参可以写成数组arr[]的形式,等于*arr。根据一中所讲。如果实参传过去的是整个数组,那么sizeof(arr)就是40个字节,如果是数组首元素的地址就是一个指针的变量。所以在函数内部是不能得到数组的个数。 应该在主函数计算出来,再传给函数。
三.⼆级指针
指针变量也是变量,是变量就有地址,那指针变量的地址存放在哪⾥? 这就是 ⼆级指针 。
#include<stdio.h>
int main()
{
int a = 0;
int* pa = &a;
int** ppa = &pa;
return 0;
}
四指针数组
指针数组是指针还是数组? 我们类⽐⼀下,整型数组,是存放整型的数组,字符数组是存放字符的数组。 那指针数组呢?是存放指针的数组 指针数组的每个元素都是⽤来存放地址(指针)的。 如下图:
五指针数组模拟⼆维数
上述的代码模拟出⼆维数组的效果,实际上并⾮完全是⼆维数组,因为每⼀⾏并⾮是连续的。