char a[10] = "pqrstuvwxyz";
printf("%s", a[3]);
printf("%s", 3[a]);
Run Code Online (Sandbox Code Playgroud)
两者都printf给出相同的输出.为什么?
它必须与C编译器在内存中表示字符串的方式有关,但它是什么?
我原本以为偏移量乘以char的大小,在这种情况下它们应该给出不同的输出.
鉴于代码:
int arr[] = {11,22,33,44,55}
for(int i = 0; i <5 ; i++)
cout << *(arr+i) << " ";
Run Code Online (Sandbox Code Playgroud)
是否*(arr+i)具有同样的效果arr[i]?
让int * ptr,array[10]; ptr= array;.现在阵列的连续位置中的每个存储器单元具有固定的大小.如果第一个单元的地址是1234,那么下一个单元必须是1238地址.但我们使用指针作为访问它*(ptr+1).我很困惑.任何来源或答案?谢谢.
A找到了以下代码段:
int a[100];
...
int value = 42[a];
Run Code Online (Sandbox Code Playgroud)
这似乎完全是做什么的a[42].
它是一个具有未定义行为或完全合法的C++代码的虚假?
正如标题所示,为什么这是有效和正确的?
int main(void)
{
int a[10];
a[5] = 22;
// Prints 22, similar to what a[5] would print.
printf("%d", 5[a]);
}
Run Code Online (Sandbox Code Playgroud) 我已经定义:
const vector<vector<int>> *ElementLines::Quad4 = new vector<vector<int>>
{
{ 0, 1 },
{ 1, 2 },
{ 2, 3 },
{ 3, 0 }
};
Run Code Online (Sandbox Code Playgroud)
稍后,我想迭代一个对象所指向的集合:
for (int j = 0; j < e->LinesIndices->size(); j++)
{
int n1Index = e->LinesIndices[j][0]; //I expect 0 (for j = 0)
int n2Index = e->LinesIndices[j][1]; //I expect 1 (for j= 0)
}
Run Code Online (Sandbox Code Playgroud)
上面的代码不会编译:
no suitable conversion function from "const std::vector<int, std::allocator<int>>" to "int" exists
Run Code Online (Sandbox Code Playgroud)
但是,如果我添加LinesIndices[j][0][0]它确实提供了一个int.我不太明白这里发生了什么.要访问一个向量,我只使用一对方括号[i],这个嵌套的向量向量是不同的?(我希望能够通过使用两对方括号来访问内容).
我已经尝试过数组和指针的ac程序
#include<stdio.h>
int main()
{
int a[10], i;
for(i=0; i<10; i++)
{
a[i]=0;
}
fun(a,i);
}
fun(int *p, int i)
{
for (i=0; i<10; i++)
{
printf("%d\n", &*(p+i));
}
}
Run Code Online (Sandbox Code Playgroud)
输出是:
2752228
2752232
2752236
2752240
2752244
2752248
2752252
2752256
2752260
2752264
Run Code Online (Sandbox Code Playgroud)
它打印地址而不是数组元素
下面给出了一个str初始化为"face" 的C代码片段:
char *str = "face";
printf("%d\n", -2[str]);
Run Code Online (Sandbox Code Playgroud) 我创建了数组:
int main()
{
int num[3] = {1, 2, 3}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我想让元素就位 1。
为什么我不能通过此代码获取元素?
printf("%d", *(num + (sizeof(int)*1)));
Run Code Online (Sandbox Code Playgroud)
这有什么不同?
printf("%d", *(num + 1));
Run Code Online (Sandbox Code Playgroud) 我在一个据称微不足道的俄罗斯方块控制台游戏代码中发现了这一点。
wchar_t *screen = new wchar_t[];
unsigned char *pField;
.
.
.
screen[someMathIndex] = L" ABCDEFG=#"[pField[someOtherMathIndex]];
Run Code Online (Sandbox Code Playgroud)
方括号前面的 wchar 字符串是什么意思?我什至无法找到一种方法来谷歌它。你能不能把我重定向到这个奇怪的东西的一些资源。