指针访问数组元素
两者意思一样,但是编译器处理起来不见得一样。就像楼上的例子a[2]跟*(a+2)是一个意思。但是对于编译器来说a[2]是一种固定的写法,因此对于地址偏移什么的有固定的处理方式,而*(a+2)在语法上应当分解为先算a+2再取值,如果编译器不优化,完全按照这种定义去编译的话,那么就会有先算出a+2这个地址这一步,因此效率要低些。至于编译优化能不能使两者一致,那就很难说了。
比如我编了这样一个程序
int
a[100];
int
b;
int
i,j,k;
for(i=0;i<1000000;i++){
for(j=0;j<100;j++){
for(k=0;k<100;k++){
b=a[0];
}
}
}
和把b=a[0]换成b=*(a)所耗时间一样。而分别换成b=a[k]和b=*(a+k)后者所耗时间明显增加很多,前者也有所增加,但比较少。编译器优化不能用这个语句测试,因为整个会被优化掉。
❷ “用指针引用数组元素”是什么意思
就是说通过指针来访问数组,例如有一个指针int *p和一个数组int a[4][2]。如果p=&a则有*p=a[0][0],*(p+1)=a[0][1],*(p+2)=a[1][0]。。。。指针就是一个地址,操作起来会比数组效率高,但是这也在无形中给使用者增加了难度。
❸ 如果指针指向一个数组,如何随机访问其指向的数组元素
举个例子:
int is[10];
int *pi = is;
访问数组中元素的三种方法:
is[i];// i<10
pi[i];
*(pi+i);
❹ 如何用数组指针访问数组中的元素(C++)
数组在内存中的存储数据就是从array[0]----->array[9]
不会存储什么array或者*array
array只是一个数组的名字,它不占据存储空间.但是它有值,它的值就是数组的首
地址值.
ptr[2]=array; ptr[2]为int 类型 array为指针 错
*ptr=array; 相当于ptr[0]=array 错误
*ptr[3]=*array; 相当于 array[3]=array[0]; 对.
访问:
for(i=0;i<10;i++)
{
printf("%d",*ptr++);
}
for(i=0;i<10;i++)
{
printf("%d",ptr[i]);
}
两个都可以
❺ 指针数组中每个元素的访问
指向数组的指针
就是数组指针
比如
int a[10];
int (*p)[10];
p=&a;
然后 访问的时候
(*p)[i];
就是a[i];
一般用来指向二维数组。
❻ 为什么要使用指针访问数组元素
实际上就是讲述另一种方法 让你明白指针的用法 其实数组和指针没有很大区别 比如一个数组a[10],我们可以用a[5]访问其中的一个数据 同样int *p=a 一样可以用p[5]访问这个数 而且a也可以代表这个数组的首地址 只不过不能增减
❼ C语言中为什么要使用指针访问数组元素
用指针有一些好处:可以再指针上直接进行计算
比如加减指针。
另外当数组作为
参数传递
到函数中的时候,用指针是很方便的。
其实数组的名字就是一个指针。
有一本经典的书
《
C专家编程
》
可以帮助理解这个问题。这种基础问题是非常重要的。
❽ C语言用指针引用数组元素
(*p)[3]是定义一个指向一维数组的指针,数组元素为三。也就是说p指向的其实是a[0],a[1],a[2]这样的形式。
p=a;其实就是把第0行的首地址赋值给p.
所以答案C中p[1]即是把第1行的首地址给p,在此基础上向后移一位,取出地址中的元素数值。 *(p[1]+1)相当于a[1][1].所以是对的。
B的形式是对的,但是它相当于a[2][1],超出界限所以为错。剩下的两个格式就不对。
❾ 什么用指针访问数组元素求解。
你定义的整形数组,可以用指向整数的指针int *s,也可以用指向数组的指针int (*s)[3];
你的代码有很多编译都会出现的错误,比如int *s;少了空格和分号。
二维数组初始化也是错的,你定义之后a[2][3]是取数组中第二组第三个的值。
s=a少了冒号,而且s是不能等于a的,因为你定义的是二维数组所以a相当于指向指针的指针。
用int *s的话应这样写s=a[0];
#include <stdio.h>
int main()
{ int a[2][3]={{1,2,3},
{4,5,6}};
int i;
int *s;
s=a[0];
for(i=0;i<6;i++)
printf("%d",s[i]);
return 0;
}
与二维数组接近的还是指向数组的指针int (*s)[3];
这可以写成s=a;而s[1]就相当于a[1]了
代码
#include <stdio.h>
int main()
{ int a[2][3]={{1,2,3},
{4,5,6}};
int i,j;
int (*s)[3];
s=a;
for(i=0;i<2;i++)
for(j=0;j<3;j++)
printf("%d",s[i][j]);
return 0;
}
希望你仔细看书,多看编译器提示,多练习揣摩数组与指针的联系。
❿ 怎么用指针访问数组元素
#include<stdio.h>
int main()
{ int i,a[10],*p=a;
for(i=0;i<10;i++)
scanf("%d",p+i);
for(i=0;i<10;i++)
printf("%d ",*(p+i));
return 0;
}