gpt4 book ai didi

c - C 中使用指针表示数组的各种方式

转载 作者:行者123 更新时间:2023-11-30 19:12:11 26 4
gpt4 key购买 nike

我正在用 C 语言试验数组和指针。这里

http://r4r.co.in/c/c_topics/c_array_basics/array_representation_in_memory.shtml

我读到了

ar[2]=*(ar+(sizeof(datatype)*2));

但是在 C:- 中编写以下测试程序之后:-

#include<stdio.h>
#include<conio.h>

int main()
{
int array[]={10,11,12,13,14};

printf("\nArray:%d",array);
printf("\nArray+4:%p",array+4);
printf("\nArray+(sizeof(int)*4):%p",array+((sizeof(int))*4));
printf("\n*(Array+4):%d",*(array+4));
printf("\n*(Array+(sizeof(int)*4)):%d",*(array+((sizeof(int))*4)));

getch();
return 0;
}

我得到以下输出:-

Array:2686700
Array+4:0028FEFC
Array+(sizeof(int)*4):0028FF2C
*(Array+4):14
*(Array+(sizeof(int)*4)):4214784

所以从这里我得出的结论是表达式

array[4]=*(array+(sizeof(int)*4));

不是工作而是表达

array[4]=*(array+4);

是真的。

那么我的结论是对还是错呢?如果是错的那为什么会这样呢?

语言:-C版本:-gcc (tdm-1) 4.7.1平台:-Windows 8.1

编辑:
1)。更改了以下几行:
((sizeof(int*))*4((sizeof(int))*4
2)。将标题更改为:在 C 中使用指针表示数组的各种方式。
3)。修正语法。

最佳答案

E1[E2] 被定义为等同于 *((E1)+(E2)) ( N1570 6.5.2.1),因此 array[4] 将始终为 *(array+4) ,前提是它在有效范围内。

在指向整数的指针之间使用的

+ 运算符被定义为在指针所指向的内容之后给出(整数)元素(而不是字节)。 (N1570 6.5.6),因此如果 sizeof(int) >= 2 并且 *(array+(sizeof(int)*4)) 将超出范围将指针移至范围外将调用未定义的行为

另请注意,您应该为 printf() 使用正确的格式说明符,否则您将调用未定义的行为

#include<stdio.h>

int main(void)
{
int array[]={10,11,12,13,14};

printf("\nArray:%p",(void*)array);
printf("\nArray+4:%p",(void*)(array+4));
printf("\nArray+(sizeof(int)*4):%p",(void*)(array+((sizeof(int*))*4))); /* maybe undefined behavior */
printf("\n*(Array+4):%d",*(array+4));
printf("\n*(Array+(sizeof(int)*4)):%d",*(array+((sizeof(int*))*4))); /* maybe undefined behavior */

return 0;
}

关于c - C 中使用指针表示数组的各种方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37641599/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com