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

c访问数组元素

发布时间: 2024-02-24 03:07:41

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)后者所耗时间明显增加很多,前者也有所增加,但比较少。编译器优化不能用这个语句测试,因为整个会被优化掉。

② C语言里应该怎么来访问数组中的元素

用数组下标来访问
例如,定义一个数组:int a[5]={1,2,3,4,5};
a[0]=1;
a[1]=2;
a[2]=3;
a[3]=4;
a[4]=5;

③ C语言中为什么要使用指针访问数组元素

用指针有一些好处:可以再指针上直接进行计算
比如加减指针。
另外当数组作为
参数传递
到函数中的时候,用指针是很方便的。
其实数组的名字就是一个指针。
有一本经典的书

C专家编程

可以帮助理解这个问题。这种基础问题是非常重要的。

④ 在C语言中,用下标如何访问数组元素

.以下标引用的方式访问数组

在使用数组的场合中,我们常见的一种访问方法是使用下标访问数组元素,如:array[2] = 1,此语句是将该数组的第三个元素赋值为1.[ ]符号中的数字可以认为是在数组基地址上的偏移量,可以通过改变这个偏移量来访问整个数组。

2.以指针访问的方式访问数组

除了使用偏移量的方法,我们还可以使用指针的方法来访问数组,即间接引用的方式。如:*(array+2) = 1,同上面的代码一样,也是对该数组的第三个元素进行赋值。

3.下标引用和指针访问的执行效率问题

对于这两灶蚂种不同的访问数组的方式,它们的执行效率也不同,在这里先给出结论:指针访问的效率 >= 下标引用的效率。接下来我们来说说,为什么使用指针进行间接访问的效率会优于小标引用的效率。

下标引用的效率

现在假设有如下代码,执行对整个数组的初始化过程:

int array[10];

for(int i = 0;i < 10;i++)

{

array[i] = 0;

}

在这里我们还是假设编译器中int类型占4个字节,在执行array[i] = 0时,编译器会将其转化为类似*(array + (i*4)) = 0形式。在整个执行10次的循环中,意味着也进行了10次乘法运算操作和10次加法运算操作。李腔

指针访问的效率

假设有如下代码,执行对整个数组的初始化过程:

int array[10];

for(int *ptr = array; ptr < array+10; ptr++)

{

*ptr = 0;

}

这里是将指针一开始指向数组首地址,然后每次向后移动一个数组元素,这里是每次移动4个字节,即每次对指针地址+4。在整个过程中只进行了10次加法运算。同上对比可得,对于数组操作来说,指针访问的效率是优于下标引用的。

4.下标引用和指针访问的优先级问题

关于这个问题,笔者还是先给出结论,再举例进行阐述。

结论:下标引用优先级 > 指针访问优先级。

假设我们现在有以下两隐扰埋个数组的声明:

int *array1[10];

int (*array2)[10];

关于上述声明,乍一看很容易混淆,但其实这只是一个关于结合优先级的问题。在看这些声明时,需要记住下标优先级高于指针*,并且如果出现了( ),那么它的优先级一定是最高的。

int *array1[10]

在*和[ ]同时出现的时候,我们先结合优先级高的[ ]来看,即它先声明了一个含有10个元素的数组array1,然后将剩下的int *组合,可以知道这个数组里面的每个元素,都是一个指向整型类型的指针变量。也就是说,这是一个含有10个指针变量的指针数组。

int (*array2)[10]

这里的声明中出现了( ),由于( )的优先级最高,所以我们先看(*array2),即array2是一个指向某种类型的指针变量。再结合剩下的int [10],可以知道这个指针变量指向的数据类型是含有10个元素的整型数组。也就是说,这是一个数组指针,指向一个10元素整型数组。

热点内容
编程自学入门教程 发布:2024-10-18 13:50:58 浏览:141
伊迪阿明访问中国 发布:2024-10-18 13:49:54 浏览:10
人三琳外传脚本 发布:2024-10-18 13:38:16 浏览:839
电脑发件箱服务器错误怎么弄 发布:2024-10-18 13:30:36 浏览:914
evm部署solc编译文件 发布:2024-10-18 13:29:47 浏览:835
android发送at指令 发布:2024-10-18 13:14:18 浏览:659
安卓手机哪个工艺最好 发布:2024-10-18 13:01:43 浏览:283
源程序编译过程中装配器 发布:2024-10-18 13:01:43 浏览:118
如何查询服务器的序列号 发布:2024-10-18 12:57:04 浏览:670
钻石脚本 发布:2024-10-18 12:56:59 浏览:852