二级指针和二维数组的区别(二维数组和二级指针)
本文目录
- 二维数组和二级指针
- 二维数组就是二级指针
- 二维数组和指针的一个疑问
- 数组指针是二级指针吗请解释一下!谢谢!
- c语言 二级指针问题 这个程序里w=b;换成w=c;为什么printf(“%s\n“,*(w+1));这一句就不行
二维数组和二级指针
通过二级指针去访问二维数组需要先给二级指针分配等同于二维数组行数的一维数组指针,然后把二维数组的每行首地址赋值给对应位置的一维指针上。之后就可以通过二维指针直接访问了。参考代码如下,可以看具体注释辅助理解。 #include 《stdio.h》//输入输出头文件。#include 《stdlib.h》//本程序需要用到malloc/free函数,引用该头文件。int main(){ int a这里也可以写作*(*(p+i) + j)。 printf("\n"); //每行输出后加一个换行 } free(p);//释放申请的内存。 return 0;}
二维数组就是二级指针
数组是数组,是一组数据类型相同的变量的集合;指针是指针,指针是变量在内存中的存储地址。二者不是一个东西,二维数组可以看成是一个矩阵,而二维指针可以看成是“地址的地址”。记住,指针是地址。
二维数组和指针的一个疑问
a是一个二级指针,也成为行指针。它是一个常量指针。对a操作就使指针指向其他行。比如a+1就指向了第一行。*a是一级指针,*(a+1)是第一行首个元素的地址,相当于于a。**a是内容。*(*(a+1)+1)是第一行第一个元素,相当于a。这里a与*a相同,可以类比为一个函数int max()和一个函数指针int (*p)();写成p=max,*p=max都是一样的。比如max的地址是1000,&max也是1000.是因为它是一个常量指针。这里*a理解为对a的首地址进行取值也是可以的。
数组指针是二级指针吗请解释一下!谢谢!
一般不是,一般都是一级指针,二级指针明显很麻烦,不清晰,但你要用二级指针也可以,自己定义就行了,指针数组,是一个数组,只不过其中的元素都是指针罢了,一般都是一级指针的,还没看到过二级指针,没必要时二级指针啊!~
c语言 二级指针问题 这个程序里w=b;换成w=c;为什么printf(“%s\n“,*(w+1));这一句就不行
w=c;这个用法本来就不建议的,即使编译可以通过。我用最浅显的说法来解释就是,两者是不同类型来的,如果你是初学者,那么记住二维数组不是二级指针,二维数组叫行指针,如果你想深入点理解可以往下看,计算机对你的操作解释如下:1)w=c,那么把c的地址写入二级指针w中。2)w+1,对于这句,因为w是char**类型,所以执行的是把w中存的地址,也就是刚才被写入c的地址。3)*(w+1)这句怎么解释,我们知道*是把对应数据当做地址,并进行寻址求值,用汇编的说法就类似mov ax,的值,你用%c输出他就出来了。