相关疑难解决方法(0)

char*数组和char数组[]

如果我写这个

 char *array = "One good thing about music";
Run Code Online (Sandbox Code Playgroud)

我实际创建一个数组?我的意思是这样的一样吗?

char array[] = {"One", "good", "thing", "about", "music"};
Run Code Online (Sandbox Code Playgroud)

c arrays pointers char

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

什么是0 [p]在做什么?

以下C代码在做什么?

int i;
int* p = &i;
0[p] = 42;
Run Code Online (Sandbox Code Playgroud)

我会想,这不会是事件编译.但它甚至在没有分段错误的情况下执行.所以我想知道[]我错过了什么奇怪的运算符.

c

10
推荐指数
3
解决办法
844
查看次数

C++反转索引器和数组名称

我在网上看到了这个,并想知道是否有人能够解释这个或者至少给我一个可能的名称,这样我至少可以知道我在谷歌上搜索.

int main()
{
   int myarray[4] = {0, 100, 200, 300};
   2[myarray] = -999;  //why does this work? what is this called?

   for ( int i = 0; i < 4; i++) 
      cout << myarray[i] << endl;
}
Run Code Online (Sandbox Code Playgroud)

输出为0,100,-999,300

我跑了.我知道它有效,但为什么呢?这个叫什么?

c++

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

是C++标准中的int [指向数组的指针]?

据我所知,可以编写以下代码:

char *a = new char[50];
for (int i = 0; i < 50; ++i) {
    i[a] = '5';
}
Run Code Online (Sandbox Code Playgroud)

它汇编.有用.它完全一样

char *a = new char[50];
for (int i = 0; i < 50; ++i) {
    a[i] = '5';
}
Run Code Online (Sandbox Code Playgroud)

是因为:

  • a[b]*(a + b)默认情况下实现为宏,并且两个代码示例都有效的事实只是一个事故/编译器特定的事实
  • 它在某处标准化,并且这些算法的结果在每个平台上应该是相同的

可以合理地假设添加应该是可交换的,但是如果我们operator[]以这种方式实现,我们已经做了其他可交换的东西,可能不是我们想要的东西.

有趣的是,没有pointer[pointer]运营商,因此operator[]不是宏.

我知道这很糟糕.我知道阅读代码的人会感到困惑.但是我想知道这是不是偶然发生,它不会在一个遥远的地方工作,那里的独角兽有七条腿,而左边的脸颊上有角.

c++ arrays syntax pointers subscript-operator

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

无法理解使用printf的程序输出

当我找到这段代码时,我正在处理一些面试问题.

#include<stdio.h>
int main()
{
 short int a=5;

 printf("%d"+1,a);    //does not give compiler error 

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

它打印以下内容:

d
Run Code Online (Sandbox Code Playgroud)

我无法理解printf函数如何在这里工作.

c printf

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

在数组访问/下标中反转操作数的原因

在C中,可以反转数组下标的操作数,但仍然可以获得相同的结果.例如a[b] == b[a].这是因为(根据 C11草案N1570,§6.5.2.1/ 2)a[b]是相同的(*((a)+(b))),并且+是可交换的.有关更多信息,请参阅此问题.

是否有一个场景(在C中,没有运算符重载),交换运算[]符的操作数不会在运行时产生相同的值?那么,是否存在一个ab哪个a[b] != b[a]?(假设程序编译并且a[b] == a[b])

c arrays

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

C成语和鲜为人知的事实

好的,我在这里看过很多关于C中奇怪的习语和常见做法的帖子,这些帖子可能最初并不直观.也许有几个例子是有序的

数组中的元素:

#define ELEMENTS(x) (sizeof (x) / sizeof (*(x)))
Run Code Online (Sandbox Code Playgroud)

奇数数组索引:

a[5] = 5[a]
Run Code Online (Sandbox Code Playgroud)

单行if/else/while /为安全#defines

#define FOO(X) do { f(X); g(X); } while (0)
#define FOO(X) if (1) { f(X); g(X); } else
Run Code Online (Sandbox Code Playgroud)

我对专家C程序员的问题是:在C代码中有哪些成语,实践,代码snippits鲜为人知的事实,但可能不是很直观,但是对C编程提供了很好的洞察力?

c arrays macros

7
推荐指数
3
解决办法
4161
查看次数

C++:&a [2] - &a [1] ==?

a是整数数组,如果我试图减去&a[2] - &a[1] == ? 结果为4或1 的地址值 ?

编辑:在这里看到第4条评论,为什么他说1?这就是为什么我很困惑我以为它会是4

编辑:这是一个测试

c++ arrays memory-address

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

表达式-2 [数组]如何工作?

我遇到了这个美女,但我真的不明白!

#include <iostream>

using namespace std;

int main() {
  int array[] = {10, 20, 30};
  cout << -2[array];

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

它打印-30.先感谢您

编辑:由于" - "符号,不是此问题的重复.

c c++

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

ptr [i]和*(ptr + i)之间有什么区别?

当使用指向数组的指针时,我总是使用索引器访问元素,例如myPtr[i] = stuff; 然而,我最近在查看BitConverter实现,并发现通过实现访问元素*(myPtr + i) = stuff.

我认为这很奇怪,因为两种方法(从我所知道的)做同样的事情,也就是说,它们返回地址myPtr + i,除了(在我看来)索引器方法看起来更具可读性.

那么为什么微软选择以他们的方式增加指针,这两种方法之间有什么区别(是否有性能优势)?

.net c# arrays pointers

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

标签 统计

arrays ×6

c ×6

c++ ×4

pointers ×3

.net ×1

c# ×1

char ×1

macros ×1

memory-address ×1

printf ×1

subscript-operator ×1

syntax ×1