相关疑难解决方法(0)

这段代码如何在不使用sizeof()的情况下确定数组大小?

通过一些C面试问题,我找到了一个问题,指出“如何在不使用sizeof运算符的情况下在C中查找数组的大小?”,并提供以下解决方案。它有效,但是我不明白为什么。

#include <stdio.h>

int main() {
    int a[] = {100, 200, 300, 400, 500};
    int size = 0;

    size = *(&a + 1) - a;
    printf("%d\n", size);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

如预期的那样,它返回5。

编辑:人们指出了这个答案,但是语法确实有所不同,即索引方法

size = (&arr)[1] - arr;
Run Code Online (Sandbox Code Playgroud)

因此,我认为这两个问题都是有效的,并且对该问题的解决方法略有不同。谢谢大家的大力帮助和详尽的解释!

c arrays size pointer-arithmetic language-lawyer

130
推荐指数
3
解决办法
8004
查看次数

是`*((*(&array + 1)) - 1)`可以安全地用来获取自动数组的最后一个元素吗?

假设我想获取大小未知的自动数组的最后一个元素.我知道我可以利用sizeof运算符来获取数组的大小并相应地获取最后一个元素.

使用*((*(&array + 1)) - 1)安全吗?

喜欢:

char array[SOME_SIZE] = { ... };
printf("Last element = %c", *((*(&array + 1)) - 1));
Run Code Online (Sandbox Code Playgroud)
int array[SOME_SIZE] = { ... };
printf("Last element = %d", *((*(&array + 1)) - 1));
Run Code Online (Sandbox Code Playgroud)

等等

c arrays language-lawyer

34
推荐指数
3
解决办法
1840
查看次数

C程序地址增加数组和数组名称

int arr[10]={1,2,3,4,5,6,7,8,9,10};
printf("%p,%p\n", arr, &arr);
printf("%p,%p\n", arr+1, &arr+1);
return 0;
Run Code Online (Sandbox Code Playgroud)

对于此代码,GCC编译器返回

0xbfe41348,0xbfe41348
0xbfe4134c,0xbfe41370
Run Code Online (Sandbox Code Playgroud)

第一行很清楚,没问题.但第二行让我感到困惑.第一个地址移动到下一个int,所以它是4个字节后arr,清除.但是,因为&arr+1我认为它将指向整个数组的末尾arr[10],所以它应该向地址添加4*10.我误解了什么吗?

c arrays memory-address

2
推荐指数
2
解决办法
124
查看次数

为什么不能将ac指针视为数组?

查找数组的大小而不使用C中sizeof的问题中,提问者通过获取地址然后指定数组索引1来处理类似于int数组的int数组:

int arr[100];
printf ("%d\n", (&arr)[1] - arr);
Run Code Online (Sandbox Code Playgroud)

该值最终成为之后100个元素的"下一个"数组中第一个元素的地址arr.当我尝试这个类似的代码时,似乎没有做同样的事情:

int *y = NULL;
printf("y = %d\n", y);
printf("(&y)[0] = %d\n", (&y)[0]);
printf("(&y)[1] = %d\n", (&y)[1]);
Run Code Online (Sandbox Code Playgroud)

我最终得到:

y = 1552652636
(&y)[0] = 1552652636
(&y)[1] = 0
Run Code Online (Sandbox Code Playgroud)

为什么不是(&y)[1]指向int的"next"指针的地址y

c arrays

1
推荐指数
1
解决办法
184
查看次数

数组的长度

我需要找到数组的长度,如何在不使用该sizeof函数的情况下执行此操作.

例如,如果

Array 1 = [0 1 2 3 4 5 6]
Run Code Online (Sandbox Code Playgroud)

这个数组的大小是7.

c arrays

-1
推荐指数
1
解决办法
130
查看次数