课堂知识点:
二级指针变量:
可以用来存储二级指针常量,就是一级指针变量的地址
一级指针变量:
可以用来存储一级指针常量,就是普通变量的地址
普通变量:
只能存储与之对应的常量
地址加减:
地址加一或减一就是加上或减去它单位长度相同的字节,如果是数组“完整地址”加减就是加上或减轻它数组长度的字符
malloc的作用是什么?:
申请堆空间,然后把堆空间的首地址返回给你使用。申请的空间的大小要根据你的指针变量的类型来思考
二维数组:
二维数组包含多个一维数组,其中二维数组的 行:一维数组的个数 列:一维数组的长度(每一个一维数组的长度都应该是一样的),所以列数在二维数组变量定义的时候要确定
(注意)在定义二维数组时行可以先不定义,但列必须定义
int array[行][列]; 二维数的 [ ] 中括号里一定是常量或常量表达式
数组名:数组名确实能代表受元素地址但有两个例外
1,sizeof(数组名),这里的数组名代表的是整个数组,计算的是整个数组的大小,单位是字节
2,&数组名,这里的数组名代表的是整个数组,取出的是整个数组的地址
课堂练习:

其中,前三个是比较重要的,理解好前三个剩下的就好理解了。
首先,我们应该区分 “完整地址+1” 和 “首元素地址+1”
数组名指向数组首元素地址代表数组地址,但不是数组完整的全部元素的地址
因为内存里的元素是连续的,所以通常以首个元素地址代表数组地址
当直接使用数组名进行加减时 arry+1 数组名=数组首元素地址
arry = arry[0] 会跳过单位类型个字节
当对数组名进行取地址时 &arry +1 这里会跳过整个数组长度的地址
此外,我们还要注意:
取地址 & 与 解引用 * 可以相互抵消
为什么数组名可以当初指针来用呢?
因为当数组名出现在表达式中时,它会被隐式转换为指向数组第一个元素的指针。
这意味着你可以将数组名视为指针来使用,可以对它执行指针运算,比如对其加1或减
练习:





作业:
int main()
{
int num = 0,sum =0;
int array[] = {0,1,0,1,1,1,1,0,0,0,0,1,1,1,};
num = sizeof(array) / sizeof(int);
for(int i =0; i<num; i++)
{
while(array[i]){
sum++;
break;
}
}
printf("0有%d次----1有%d次",num - sum,sum);
return 0;
}

本文介绍了C语言中的一级指针、二级指针、普通变量、地址操作以及malloc函数的作用。重点讲解了数组名作为指针的特性,以及如何处理数组的首元素地址和完整地址。并通过实例展示了数组名在指针运算中的应用。
1838





