c - 为什么指针数组和数组给出相同的输出
问题描述
1) 如何使用指针数组访问数组元素?
通过指向数组的指针,我们可以像这样访问 (∗a)[0] ,(∗a)[22] ,….. 像这样
正确的?
但是如何使用指针数组?
2)检查这三个代码,其中一个使用数组,其中一个使用指针数组,第三个使用双指针,但都给出相同的输出。为什么??
#include <stdio.h>
int ptr[12];
int main(void) {
if(*(ptr+5)==*(ptr+3)){
printf("Equal");
}
else{
printf("Not Equal");
}
return 0;
}
#include <stdio.h>
int *ptr[12];
int main(void) {
if(*(ptr+5)==*(ptr+3)){
printf("Equal");
}
else{
printf("Not Equal");
}
return 0;
}
#include <stdio.h>
int **ptr[12];
int main(void) {
if(*(ptr+5)==*(ptr+3)){
printf("Equal");
}
else{
printf("Not Equal");
}
return 0;
}
解决方案
在*(ptr+5)
:
ptr
是数组的名称。- 当数组在表达式中使用并且不是操作数
sizeof
或一元&
数组并且不是用于初始化数组的字符串文字时,它会转换为指向其第一个元素的指针。所以ptr
指向数组的元素 0。 ptr+5
加五,得到一个指向数组元素 5 的指针。*
取消引用指针,生成数组元素 5 的内容。
由于数组是在任何函数之外定义的,因此它被初始化为零。因此元素 5 为零,因此*(ptr+5)
也为零。同样,*(ptr+3)
是零,因此比较它们表明它们是相等的。
int ptr[12];
带有、int *ptr[12];
和的示例int **ptr[12];
仅更改数组中元素的类型。在每种情况下*(ptr+5)
,*(ptr+3)
请参阅数组的元素 5 和 3。在每种情况下,元素的值都是零(指针类型的空指针)。
如果您想查看数组不同元素之间的差异,请为数组元素分配不同的值。
推荐阅读
- python - 如何在python中将INT(track_no:1)中的字典转换为String(track_no:'1')
- reactjs - 我如何重定向在 reactjs 中提交表单并使用 formik
- python - 在 python opencv 中实现 Robert 的边缘算子进行边缘检测
- firebase - 使用 eventId 作为 Firestore 文档 ID 总是安全的吗?
- wordpress - 如何在 wordpress 中启用修订
- c++ - 为什么成员函数与局部函数不同地传递给 std::thread?
- python - Reading QAudioProbe buffer
- pandas - TypeError: 'function' object is not subscriptable 如何在读取 csv 文件时解决此错误
- dicom - C-Find(查询/检索)中 SOP 类 UID 的匹配如何工作?
- javascript - 打开新页面并在该新页面中运行 javascript 函数