的指针,它本身都有一个入口地址,该地址相当于一个指针。比如函数返回一个整型值,实际上也相当于返回一个指针变量的值,
不过这时的变量是函数本身而已,而整个函数相当于一个“变量”。例如下面一个返回指针函数的例子:
#include
float *find();
main()
{
static float score[][4]={{60,70,80,90},{56,89,34,45},{34,23,56,45}};
float *p;
int i,m;
printf("Enter the number to be found:");
scanf("%d",&m);
printf("the score of NO.%d are:\n",m);
p=find(score,m);
for(i=0;i<4;i++)
printf("%5.2f\t",*(p+i));
}
float *find(float(*pionter)[4],int n)/*定义指针函数*/
{
float *pt;
pt=*(pionter+n);
return(pt);
}
pt=*(pionter+n); 这句,pt应该是一个数字,不是地址。那么find返回的是数字了?
请问这个小程序 到底什么意思? 是不是pt=*(pionter+n);这句写错了?应该去掉 *()吧?
18 个解决方案
#1
没错。
float(*pionter)[4]
pionter是指针数组,*(pionter+n)为指针
float(*pionter)[4]
pionter是指针数组,*(pionter+n)为指针
#2
float (*pointer)[4]是个行指针,*(pointer + n) 指向二维数组的第n行
#3
例子没错。
float (*pointer)[4];
由于一对圆括号的存在,*先与pointer结合,说明pointer是一个指针变量,
再与说明符【】结合,说明pointer的基类型是一个包含有4个int元素的数组。
即pointer为行指针,所以pointer+n指向第n+1行,*(pointer+n)是第n+1行
的首地址。
float (*pointer)[4];
由于一对圆括号的存在,*先与pointer结合,说明pointer是一个指针变量,
再与说明符【】结合,说明pointer的基类型是一个包含有4个int元素的数组。
即pointer为行指针,所以pointer+n指向第n+1行,*(pointer+n)是第n+1行
的首地址。
#4
pt=*(pionter+n);//(pionter+n)指向的还是地址
他在piontier数组里存的是指针而不是一般的数字字符之类
他在piontier数组里存的是指针而不是一般的数字字符之类
#5
float(*pionter)[4];
pionter声明的是一个指针,这个指针指向一个有四个float元素的数组。
pionter+n
pionter每加1就代表跳过一个含四个float元素的数组的地址空间,也就是4*4=16,
并指向这个有四个float元素的数组。
*对它进行解引用,它就指向了数组的元素,也就是float *
pionter声明的是一个指针,这个指针指向一个有四个float元素的数组。
pionter+n
pionter每加1就代表跳过一个含四个float元素的数组的地址空间,也就是4*4=16,
并指向这个有四个float元素的数组。
*对它进行解引用,它就指向了数组的元素,也就是float *
#6
没有错,各位大侠解释的挺好!!
顶一个!!
顶一个!!
#7
这个指针指向的类型是:
包含4个float元素的一维数组
学习了
包含4个float元素的一维数组
学习了
#8
程序的最终功能是什么? 还是匪夷所思,我去看看指针数组
#9
float(*pionter)[4]???这个是数组指针吧?
#10
实际就是一个二维的数组,一个指针实际就是一个32位的整型
最好理解为指针的一维数组
#11
p=find(score,m);
我主要是想知道传参数 float(*pionter)[4]=score之后发生了什么?
初始化一个 数组指针float (*pionter)[4],而pointer=什么? *pointer=什么??
pt=*(pointer+n), p=pt , 最后打印出 *(p+i),于是相当于输出*((*(pointer+n))+i)对吗?
注释: pionter就是pointer 原文单词拼写错误
我主要是想知道传参数 float(*pionter)[4]=score之后发生了什么?
初始化一个 数组指针float (*pionter)[4],而pointer=什么? *pointer=什么??
pt=*(pointer+n), p=pt , 最后打印出 *(p+i),于是相当于输出*((*(pointer+n))+i)对吗?
注释: pionter就是pointer 原文单词拼写错误
#12
莫非是:传入参数后 pointer指向 首个元素的地址,而不是指向首个元素;*pointer才指向首个元素,**pointer的值就是首个元素
这种说法对吗? 如果不对,他们前面说的就都不对了。
这种说法对吗? 如果不对,他们前面说的就都不对了。
#13
但愿你 “*(pointer+n)是第n+1行的首地址。”这句话是对的。然后我发觉 数组指针这个东西把 二维数组(用横坐标和纵坐标访问) 变得可以 用 行数和 行内偏移(即列数)来用指针表示。这有什么意义吗?不是一样的吗?
#14
pointer就是整个二维数组的首地址,*pointer就是每个行的首地址,**pointer就是每行收个元素的值;前面几位都说的没错。
#15
#include <stdio.h>
void main()
{
int array[5];
int (*pa)[5]=&array; //注意前头那个&符号, 性质变了
}
#16
顶 我原以为是数组指针 其实“最好理解为指针的一维数组
” 受教!
” 受教!
#17
明白了,大家说的都是最重结果,但是没说这个最终结果是怎么来的
我来说说我的理解,传入参数的时候 float(*pointer)[4]= score; 这句话产生了如下影响
pointer存储了 地址的地址, *pointer 存储了地址, **pointer存储了数组的值;
pointer“每一跳” 内存地址递增 16字节, 因为每一行有四个数,每个数是int类型,占4个字节。
所以pointer+1就代表了 地址增16字节。。。。对吗?
我来说说我的理解,传入参数的时候 float(*pointer)[4]= score; 这句话产生了如下影响
pointer存储了 地址的地址, *pointer 存储了地址, **pointer存储了数组的值;
pointer“每一跳” 内存地址递增 16字节, 因为每一行有四个数,每个数是int类型,占4个字节。
所以pointer+1就代表了 地址增16字节。。。。对吗?
#18
指针数组,数组元素就是指针
#1
没错。
float(*pionter)[4]
pionter是指针数组,*(pionter+n)为指针
float(*pionter)[4]
pionter是指针数组,*(pionter+n)为指针
#2
float (*pointer)[4]是个行指针,*(pointer + n) 指向二维数组的第n行
#3
例子没错。
float (*pointer)[4];
由于一对圆括号的存在,*先与pointer结合,说明pointer是一个指针变量,
再与说明符【】结合,说明pointer的基类型是一个包含有4个int元素的数组。
即pointer为行指针,所以pointer+n指向第n+1行,*(pointer+n)是第n+1行
的首地址。
float (*pointer)[4];
由于一对圆括号的存在,*先与pointer结合,说明pointer是一个指针变量,
再与说明符【】结合,说明pointer的基类型是一个包含有4个int元素的数组。
即pointer为行指针,所以pointer+n指向第n+1行,*(pointer+n)是第n+1行
的首地址。
#4
pt=*(pionter+n);//(pionter+n)指向的还是地址
他在piontier数组里存的是指针而不是一般的数字字符之类
他在piontier数组里存的是指针而不是一般的数字字符之类
#5
float(*pionter)[4];
pionter声明的是一个指针,这个指针指向一个有四个float元素的数组。
pionter+n
pionter每加1就代表跳过一个含四个float元素的数组的地址空间,也就是4*4=16,
并指向这个有四个float元素的数组。
*对它进行解引用,它就指向了数组的元素,也就是float *
pionter声明的是一个指针,这个指针指向一个有四个float元素的数组。
pionter+n
pionter每加1就代表跳过一个含四个float元素的数组的地址空间,也就是4*4=16,
并指向这个有四个float元素的数组。
*对它进行解引用,它就指向了数组的元素,也就是float *
#6
没有错,各位大侠解释的挺好!!
顶一个!!
顶一个!!
#7
这个指针指向的类型是:
包含4个float元素的一维数组
学习了
包含4个float元素的一维数组
学习了
#8
程序的最终功能是什么? 还是匪夷所思,我去看看指针数组
#9
float(*pionter)[4]???这个是数组指针吧?
#10
实际就是一个二维的数组,一个指针实际就是一个32位的整型
最好理解为指针的一维数组
#11
p=find(score,m);
我主要是想知道传参数 float(*pionter)[4]=score之后发生了什么?
初始化一个 数组指针float (*pionter)[4],而pointer=什么? *pointer=什么??
pt=*(pointer+n), p=pt , 最后打印出 *(p+i),于是相当于输出*((*(pointer+n))+i)对吗?
注释: pionter就是pointer 原文单词拼写错误
我主要是想知道传参数 float(*pionter)[4]=score之后发生了什么?
初始化一个 数组指针float (*pionter)[4],而pointer=什么? *pointer=什么??
pt=*(pointer+n), p=pt , 最后打印出 *(p+i),于是相当于输出*((*(pointer+n))+i)对吗?
注释: pionter就是pointer 原文单词拼写错误
#12
莫非是:传入参数后 pointer指向 首个元素的地址,而不是指向首个元素;*pointer才指向首个元素,**pointer的值就是首个元素
这种说法对吗? 如果不对,他们前面说的就都不对了。
这种说法对吗? 如果不对,他们前面说的就都不对了。
#13
但愿你 “*(pointer+n)是第n+1行的首地址。”这句话是对的。然后我发觉 数组指针这个东西把 二维数组(用横坐标和纵坐标访问) 变得可以 用 行数和 行内偏移(即列数)来用指针表示。这有什么意义吗?不是一样的吗?
#14
pointer就是整个二维数组的首地址,*pointer就是每个行的首地址,**pointer就是每行收个元素的值;前面几位都说的没错。
#15
#include <stdio.h>
void main()
{
int array[5];
int (*pa)[5]=&array; //注意前头那个&符号, 性质变了
}
#16
顶 我原以为是数组指针 其实“最好理解为指针的一维数组
” 受教!
” 受教!
#17
明白了,大家说的都是最重结果,但是没说这个最终结果是怎么来的
我来说说我的理解,传入参数的时候 float(*pointer)[4]= score; 这句话产生了如下影响
pointer存储了 地址的地址, *pointer 存储了地址, **pointer存储了数组的值;
pointer“每一跳” 内存地址递增 16字节, 因为每一行有四个数,每个数是int类型,占4个字节。
所以pointer+1就代表了 地址增16字节。。。。对吗?
我来说说我的理解,传入参数的时候 float(*pointer)[4]= score; 这句话产生了如下影响
pointer存储了 地址的地址, *pointer 存储了地址, **pointer存储了数组的值;
pointer“每一跳” 内存地址递增 16字节, 因为每一行有四个数,每个数是int类型,占4个字节。
所以pointer+1就代表了 地址增16字节。。。。对吗?
#18
指针数组,数组元素就是指针