相关疑难解决方法(0)

最奇怪的语言特征

在您看来,您遇到的最令人惊讶,奇怪,奇怪或真正的"WTF"语言功能是什么?

每个答案只能有一个功能.

language-agnostic programming-languages

975
推荐指数
176
解决办法
48万
查看次数

什么是阵列衰减?

什么是阵列的衰变?与数组指针有关系吗?

c c++ arrays pointers

358
推荐指数
8
解决办法
5万
查看次数

数组名称是指针吗?

数组的名称是C中的指针吗?如果没有,数组的名称和指针变量之间有什么区别?

c arrays pointers

191
推荐指数
4
解决办法
6万
查看次数

为什么(以及何时)我需要在sizeof之后使用括号?

以下无法编译:

typedef int arr[10];
int main(void) {
    return sizeof arr;
}

sizeof.c:3: error: expected expression before ‘arr’
Run Code Online (Sandbox Code Playgroud)

但如果我改成它

sizeof(arr);
Run Code Online (Sandbox Code Playgroud)

一切都好.为什么?

c sizeof

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

为什么这样做?不合逻辑的阵列访问

我的一个朋友第一次学习C++,并发给我这个片段:

int foo[] = { 3, 38, 38, 0, 19, 21, 3, 11, 19, 42 };
char bar[] = " abcdefghijklmnopqrstuvwxyz01234567890+-,.!?-_";
for (int i = 0; i < 10; ++i) {
  std::cout << foo[i][bar];
}
Run Code Online (Sandbox Code Playgroud)

乍一看,我告诉他它不会工作 - 我认为它不会编译,或者至少会导致访问冲突,因为foo它不是一个二维数组,他回答说它确实如此.

我为自己试了一下,令我惊讶的是,这个片段完全没问题.问题是:为什么?

根据逻辑,常识和良好实践,语法应该是bar[foo[i]].

我很惭愧地承认我不知道发生了什么.foo[i][bar]在这种情况下,什么使有效的语法?

c++ syntax

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

为什么arr [-2]不等于-2 [arr]?

#include <iostream>
using namespace std;

int main() 
{
    int arr[3] = { 10, 20, 30 };
    cout << arr[-2] << endl;
    cout << -2[arr] << endl;        
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

4196160
-30
Run Code Online (Sandbox Code Playgroud)

arr[-2]超出范围并且无效,导致未定义的行为.但-2[arr]评估为-30.为什么?

arr[-2]等于-2[arr]

c++ arrays undefined-behavior

32
推荐指数
3
解决办法
8296
查看次数

为什么内置阵列不安全?

Stanley B. Lippman撰写的C++ Primer第5版(ISBN 0-321-71411-3/978-0-321-71411-4)提到:

An [std::]array是一种更安全,更易于使用的内置阵列替代方案.

内置阵列有什么问题?

c++ arrays

27
推荐指数
4
解决办法
3010
查看次数

当p指向(整数)索引数组时,“-1 [p]”是什么?

今天,我偶然发现了一个谜语,这给我带来了新的惊喜。

我不认为下面的示例中的-1 [p]可以编译,但是可以。实际上,x最终为-3。

    int x;
    int array[] = {1, 2, 3};
    int *p = &array[1];
    x = -1[p]
Run Code Online (Sandbox Code Playgroud)

我在互联网上搜索了-1 [pointer]之类的东西,但找不到任何东西。好的,我承认很难输入正确的搜索查询。谁知道为什么-1 [p]编译而X变为-3?

c arrays pointers unary-operator postfix-operator

20
推荐指数
4
解决办法
2946
查看次数

C++数组[索引]与索引[数组]

可能重复:
在C数组中为什么这是真的?a [5] == 5 [a]

array [index]和index [array]的可能性是编译器功能还是语言功能.第二个怎么可能?

c c++ arrays

12
推荐指数
3
解决办法
3755
查看次数

句法糖与特征

在C#(和Java)中,字符串只是一个具有存储长度的char数组,并且添加了一些方法.同样地,(参考与值之外的东西除外)对象只不过是带有继承和接口的美化结构.

在一个层面上,这些新增功能感觉就像是清晰的功能和增强功能.在另一个层面上,他们觉得从"语法糖"状态的边缘升级.

为了进一步考虑这个想法,请考虑(我可能有一些细节错误,但重点仍然是):

transistor
elementary logic gate
compound gate
  |         |
 ALU    flip-flop
   |    |       |
   | register  RAM
   | |
   CPU
   microcode
   assembly
   C
   C++
   | |
MSIL JavaScript
C#   jQuery
Run Code Online (Sandbox Code Playgroud)

很多时候,任何单一的抽象层看起来都像语法糖,但是多层分离感觉彼此之间的距离非常小.

你怎么知道什么东西停止了语法糖并开始成为一个真正的功能?

language-agnostic syntax syntactic-sugar

12
推荐指数
4
解决办法
991
查看次数