关于C语言指针 (*p)[]的问题

作者&投稿:悟帝 (若有异议请与网页底部的电邮联系)
关于C语言的指针问题(指针的地址+1问题)~

我来给你写个例子,你参考一下
int *p, *q,*s;
int a[3] = {2,8,25};
p = a;//将a的首地址赋值给p 那么p指向的值应该是a[0]的值2
printf("a[0] = %d; *p = %d
", a[0], *p);
q = &a[0] + 1;//将a[0]的地址向右偏移一位就等于a[1]的地址 a[1] = 8那么*q应该等于8
s = q + 1;//将q指针向右偏移一位,相当于把a[1]的地址向右偏移一位,即a[2]的地址指向的值是25
//打印验证一下
printf("a[0] = %d; *q = %d ;a[1] = %d *s = %d
", a[0], *q,a[1],*s);

(*p)3是在定义指针数组,准备与a[3][3]进行赋值。
p=&a[0][0];是在取a[0][0]的地址,把它付给指针p。

还有你说的一维变二维应该是没有的。数组本身就是二维的。
这个题的输出应该是如下:
1 2 3
4 5 6
7 8 9
1please press any key to continue
应该是这样

1、float (*p)[4],首先(*p)表示p是一个指针变量,它指向一个包含四个float型元素的一维数组。float *p则表示p是一个指针,指向一个float型元素,指针所指对象的类型决定了它递增时,在内存中移动的位数。如果说float型元素占四个字节,则float (*p)[4]中p+1,相当于向后移动4*4=16个字节,而float *p中,p+1,相当于向后移动四个字节。
2、aver(a,12); /*书上是aver(*a,2) 但是不加*也可以是怎么回事*/
对于这个问题,原因是a代表二维数组的首地址,*a代表的是a[0]的首地址。由于它们的地址的值是一样,作为参数传给了aver函数,而这个函数的定义中参数是一个float *p,它需要是的地址,所以结果也可以运行出来,这里是巧合,但是它们的类型是不一样的,例如a+1与*a+1二者的地址值是不一样的,所以严格来说aver(a,12)是不正确的。
不知是否明白,不清楚的地方请提出来,可以自己多调试下!

这个很简单啊!
举例 int a[10]={0}
func(a)实参将一维数组名穿进去,那么形参肯定是int *b,或者 int a[]这样的(a[0].a[1]....a[9都表示一个整数])
int a[10][10]={0}
fun(a)实参将二维数组名穿进去,那么形参肯定是int b[][10]或者是int (*b)[10]这样的!因为a[0]...a[9]并不是一个整数,他们都代表一个数组,因此指针必须是指向数组的指针
OK????

那是一个指针数组


上城区15216388470: 关于C语言指针 (*p)[]的问题 -
不盛石榴: 1、float (*p)[4],首先(*p)表示p是一个指针变量,它指向一个包含四个float型元素的一维数组.float *p则表示p是一个指针,指向一个float型元素,指针所指对象的类型决定了它递增时,在内存中移动的位数.如果说float型元素占四个字节,则float...

上城区15216388470: C语言中关于指针的指针问题? -
不盛石榴: 指针变量存的是地址,地址中的内容是数据 二维指针变量存的也是地址,只是址中的内容还是地址 如:int i ; int *p; int **pp; i=0; //i变量中存的是数据10,i是个变量名 p=&i; //p变量中存的是i的地址 *p==i==5 pp=&p ; //pp中存的是p变量的地址 *pp==p==&i **pp==i==5

上城区15216388470: 关于C语言指针的指针问题**P -
不盛石榴: 其实指针就是地址记住一个*就叫地址两个*就叫地址的地址如:*p就是指向某个变量的地址**p就是指向某个变量的地址的地址或者说p中存放的是某个变量的地址p中存放的是某个变量的地址的地址这个也就是整个指针的大部分内容背过后,大部分考试应该都没有问题的

上城区15216388470: c语言指针*p中p++什么意思 -
不盛石榴: **p :二级指针,表示p所指向的地址里面存放的是一个指向类型的指针. *p:一级指针,表示p所指向的地址里面存放的是一个类型的值. 扩展资料: 指针变量可以进行加减运算,例如p++、p+i、p-=i.指针变量的加减运算并不是简单的加上...

上城区15216388470: 在C语言中如果一个指针变量p指向一个字符串数组,那么*p代表着什么呢 -
不盛石榴: 指针变量p指向一个字符串数组,那么p就保存了这个字符串数组的首地址,*p就是取首地址的内容,即字符串数组的第一个字符

上城区15216388470: c语言,指针变量问题:int *p; 如果某些语句不写"*",其表达的含义是什么,比如 p=a;表示什么意思? -
不盛石榴: 赋值语句,p是个指针,但本身也是个变量啊比如 int i, *p, *a; a=&i; p=a;

上城区15216388470: c语言里面关于指针的例如int *p p *p 都代表什么~? -
不盛石榴: 比如:int num, *p=num 那么int *p 就等于定义了一个指针变量,并且指向了num 至于p那就是存放了num在内存中的地址 *p就等于使用num,比如你可以num=1,也可以*p=1,他们的效果相同

上城区15216388470: C语言关于指针的一个小问题:int (*p)[4]书上说P是指向具有4个元素的一维数组的指针,而且这里p可以等于一 -
不盛石榴: 二维数组其实也是一个数组,你可以这样想 例如 int a[2][3]={{1,2,1},{3,4,3}); 你拆开看,可以作为int a[2]表示有两个元素的数组,后面的[3]表示,前面部分每个元素也是一个数组.这个数组还有3个元素.指向这个数组指针,int (*p)[3];也同样,...

上城区15216388470: C语言指针问题:在定义指针时*p=a和p=a有区别吗? -
不盛石榴: 在定义指针时,指针变量名前的*号是必须的,不能少,区别于普通变量, 说明当前变量是指针变量,而不是普通的变量.对于你的问题,我举例说明:情形一:int a[5]={1,2,3,4,5}; int *p=a;//这是在定义指针变量p的同时就直接给它初始化,即把数组a的首地址赋给它.情形二:int a[5]={1,2,3,4,5}; int *p;//声明指针变量p p = a; 这里的话是先声明指针p,然后再对它初始话,等价于情形一,只是分开写法而已.

上城区15216388470: c语言指针问题 -
不盛石榴: 第一句话就说错了,应该是“int *p;表示p是int *类型指针变量,p中存放int类型变量的地址”而不是“int *类型变量的地址”.所以后面你就解释不了了,实际上是“p=&i;是p中保存了i的地址,*p自然是p中保存的地址中的变量i的值”.那么i是多少*p就应该是多少.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网