相关疑难解决方法(0)

我在哪里可以找到当前的C或C++标准文档?

对于许多问题,答案似乎可以在"标准"中找到.但是,我们在哪里找到它?最好是在线.

谷歌搜索有时会觉得徒劳,尤其是对于C标准,因为他们在编程论坛的大量讨论中被淹没.

要开始这个,因为这些是我现在正在搜索的,那里有很好的在线资源:

  • C89
  • C99
  • C11
  • C++ 98
  • C++ 03
  • C++ 11
  • C++ 14

c c++ standards c++-faq

394
推荐指数
8
解决办法
12万
查看次数

有人可以解释这个模板代码,它给我一个数组的大小?

template<typename T, size_t n>
size_t array_size(const T (&)[n])
{
    return n;
}
Run Code Online (Sandbox Code Playgroud)

我没有得到的部分是这个模板函数的参数.当我通过数组时,数组会发生什么,它给出n了数组中元素的数量?

c++ arrays size templates

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

*(&amp;arr + 1) - arr 如何给出数组大小

int arr[] = { 3, 5, 9, 2, 8, 10, 11 };      
int arrSize = *(&arr + 1) - arr;
std::cout << arrSize;
Run Code Online (Sandbox Code Playgroud)

我不知道这是如何工作的。所以任何人都可以帮助我解决这个问题。

c++ arrays

36
推荐指数
4
解决办法
3430
查看次数

是`*((*(&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中不使用sizeof查找数组的大小

我正在寻找一种方法来在C中找到数组的大小,而不使用sizeofC语言,我找到了以下代码:

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

任何人都可以请你解释一下它是如何工作的?

c arrays sizeof

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

指针数学获取数组的长度

我不相信这是重复的(见下文)。


我发现这个问题几乎是一个精确的重复,但是我认为答案无法分析漏洞。请参阅:*((*(&array + 1))-1)`是否可以安全地用于获取自动数组的最后一个元素?


我知道通常的方法是计算sizeof(array)/sizeof(*array)以获取数组中元素的数量。(并且在注释中已向我指出C ++具有std::size(array)。)

因此,我认为如果可以到达最后一个元素之后的地址,则可以使用指针数学运算来计算该数字。但是,后来我想到我可以:

&array + 1
Run Code Online (Sandbox Code Playgroud)

但是,此值的类型是指向数组的指针,因此要使数学正常工作,我需要取消引用此值。

const auto N = *(&array + 1) - array;
Run Code Online (Sandbox Code Playgroud)

在C和C ++中是否有允许这种取消引用合法的津贴?

我知道您可以指向数组最后一个元素之后的一个,但是您不能取消引用它。但是,此取消引用会产生一个数组对象,该对象立即衰减为指向其第一个元素的指针。

我可以使用a reinterpret_cast来避免使用取消引用运算符,但是我想知道在这种情况下C和/或C ++语言是否允许取消引用。


我错过了类似的问题,但是这个问题有细微的不同。我已经了解了代码的工作原理,并且了解了将指针从数组的最后一个元素后移去通常存在问题。我要问的是,数组对象在表达式中使用时会衰减为指针的事实是否允许例外。我认为这可能是因为,取消引用指向对象的指针通常会导致对象值本身在表达式中使用(如果对象不存在,这将是一个问题)。

c c++ arrays pointers language-lawyer

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

C语言中数组是否以NULL结尾?

我是 C 初学者,有人要求我在不使用sizeof运算符的情况下计算数组的大小。所以我尝试了这段代码,但它只适用于奇数个元素。所有数组都像字符串一样以 NULL 结尾吗?

#include <stdio.h>
void main()
{
    int a[] = {1,2,3,4,5,6,7,8,9};
    int size = 0;
    for (int i = 0; a[i] != '\0'; i++)
    {
        size++;
    }
    printf("size=%d\n", size);
}
Run Code Online (Sandbox Code Playgroud)

c arrays null

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

标签 统计

arrays ×6

c ×5

c++ ×4

language-lawyer ×2

c++-faq ×1

null ×1

pointers ×1

size ×1

sizeof ×1

standards ×1

templates ×1