Ⅰ c语言一维数组和指针的关系时老师讲“一维数组名是个指针常量,它存放的是一维数组第一个元素的地址”
首先,你的老师讲“一维数组名是个指针常量,它存放的是一维数组第一个元素的地址”,这个有点问题,数组名本身就代表这个数组的第一个元素的地址,不能说“它存放的是一维数组第一个元素的地址”,a有指针的语法,但它并不是指针,它就代表它本身所处的地址,a就是&a[0],这个地址内存放的是a[0],也就是你放进去的1。
至于&a,这个就有点讲究了,在早期的c语言标准下,这个是不合法的,但是对一个数组取地址不合法有点说不过去啊,所以后来的c标准(具体哪一年不记得了)就允许对数组取地址,但含义不同了,&a在数值上和a以及&a[0]是相同的,但&a的类型是个int(*)[5],是个一维数组指针,相对于a提升了一级
Ⅱ C语言指针指向一维数组与二维数组
Ⅲ C语言中一维数组和指针有什么区别
C语言中,一维数组的数组名指向了这个数组的起始地址,而指针是它指向的某个东西的地址。例如定义int a[5],访问第二个元素可以用a[1],也可以用*(a+1)。当一个指针指向某个数组时,数组名和指针的作用应该是一样的。你定义的这个指针没有指向任何东西,是个野指针,不能通过类似于数组的方式使用。
Ⅳ C语言一维数组指针
p=&a;才是=号两边类型匹配。因为p被声明为指向有4个元素的一维整型数组的指针,而a被定义为一个整型数组的第一个元素的指针,所以写成p=a;等号两边类型不匹配,连编译都过不了。而&a就是一个有4个整型元素的一维数组的指针——就是说在int a[4]={1,3,5,7};的定义后,a是1的地址,a+1就2的地址;而&a的值虽与a相同,但&a是整个数组{1,3,5,7}的地址,&a+1就指向7后面的那个单元了。而int (*p)[4];这种声明恰好就是&a的意思,即p是个指针,指向一个4元素整型数组,也就是p+1就要跳过4个int元素所占有的空间。
printf("%d ",(*p)[3]);中的(*p)[3]的意思是这样的:有了p=&a;后,p的地址“值”就是1的地址“值”,但意思是紧挨着存放的1,3,5,7这4个int数的首地址,*p后就是第一个元素1的地址了,那么(*p)[3]就向后移动3个元素位置,应该是7了……这里把*p用()括起来是因为[]的优先级比*高,不括起来就被解释成*(p[3])了,意思就大错了!
这里涉及的指针操作表述起来有些“绕”,得慢慢体会……
Ⅳ C语言 一维数组 实参与形参与指针的问题
实参是a,它可以作为指针名使用,等同于指向首元a[0]的指针。形参int a[]等价于int *a,它指向实参a数组的首元a[0]的地址。
Ⅵ C语言:一维数组与指针
#include <stdio.h>
#define N 8
int all_sum(int *p, int n)
{
int i, sum=0;
for(i=0;i<N;i++)
{
sum+=*p;
p++;
}
return sum;
}
int average(int sum, int n)
{
return sum/n;
}
int main(void)
{
int i, j, sum, ave, arry[N];
for(i=0; i < N; i++)
{
printf("请输入第%个d数:", i);
scanf("%d",&arry[i]);
}
sum = all_sum(arry, N);
ave = average(sum, N);
printf("%d %d\n", sum, ave);
return 0;
}
Ⅶ C语言指向一维数组的指针的问题!!!
*(p+n)[i]:
这里p是指向二维数组的首元素的指针。
p+n是指向第n个学生的成绩数组的首地址的指针。
(p+n)先跟[i]结合,这是指向第n+i个学生的成绩数组的指针。
然后取其内容,就成了第n+i个学生成绩数组的第一个成绩。
之所以会出错,是因为结合方式的不同:应该改为(*(p+n))[i],就对了,符合了你的要求,呵呵