当前位置:首页 » 密码管理 » 指针访问数组元素

指针访问数组元素

发布时间: 2022-04-30 13:36:17

c语言中用指针和用下标访问数组元素的本质区别

两者意思一样,但是编译器处理起来不见得一样。就像楼上的例子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;

}

热点内容
编译器的结果是什么语言 发布:2025-05-10 11:10:32 浏览:146
快手跑金脚本 发布:2025-05-10 11:10:29 浏览:360
pl0语言编译器分析实验 发布:2025-05-10 11:10:22 浏览:25
湖南外网ftp服务器租用云主机 发布:2025-05-10 10:59:19 浏览:760
入门编程教学视频 发布:2025-05-10 10:56:41 浏览:915
php开发php开发 发布:2025-05-10 10:37:49 浏览:863
服务器地址s开头 发布:2025-05-10 10:36:59 浏览:841
为什么账号风险不能修改密码 发布:2025-05-10 10:31:23 浏览:69
sql与in相对 发布:2025-05-10 10:31:15 浏览:227
c语言led灯闪烁 发布:2025-05-10 10:26:54 浏览:814