相关疑难解决方法(0)

指针算术

有没有人对指针算术有任何好的文章或解释(博客,例子)?图中的观众是一群学习C和C++的Java程序员.

c pointers pointer-arithmetic

58
推荐指数
3
解决办法
8万
查看次数

与包含的类型相比,C++中的数组是如何对齐的?

假设我有一些T必须N字节对齐的类型.现在我声明一个类型的数组T:

T array[size];
Run Code Online (Sandbox Code Playgroud)

阵列是否具有与类型相同的对齐要求,T还是具有任何其他对齐要求?

c++ arrays

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

非数组类型的"一个接一个"指针是否是C++中的有效概念?

C++标准[sec 5.7]说:

如果指针操作数和结果指向相同的数组对象,或一个过去的数组对象的最后一个元素的元素两者,所述评估也不得产生溢出; 否则,行为未定义.

那么,我是否正确地假设其他类型的指针比数组未定义?

例如:

int a = 0;
vector<int> v(&a, (&a)+1);
Run Code Online (Sandbox Code Playgroud)

上面的代码片段编译并且工作正常(使用g ++),但它是否有效?

c++ pointers pointer-arithmetic

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

二维数组如何存储在内存中?

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int a[101][101];
    a[2][0]=10;
    cout<<a+2<<endl;
    cout<<*(a+2)<<endl;
    cout<<*(*(a+2));
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

为什么a + 2和*(a + 2)的值相同?提前致谢!

c++ arrays pointers multidimensional-array c++11

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

澄清数组和指针的关系

我想要进一步了解,并可能澄清一些让我对 C++ 中的数组和指针感到困惑的事情。让我困惑的主要事情之一是,当您引用数组的名称时,它可能是指该数组,或者是指向第一个元素的指针,以及其他一些东西。为了更好地显示我的理解困难来自哪里,我将显示几行代码,以及我从每行代码中得出的结论。

假设我有

  int vals[] = {1,50,3,28,32,500};
  int* valptr = vals;
Run Code Online (Sandbox Code Playgroud)

因为 vals 是指向数组第一个值的指针,所以这意味着 valptr 作为一个整体应该等于 vals,因为我只是将一个指针设置为等于一个指针,例如 1=1。

cout<<vals<<endl;
cout<<&vals<<endl;
cout<<*(&vals)<<endl;
cout<<valptr<<endl;
Run Code Online (Sandbox Code Playgroud)

上面的代码打印出相同的值,这让我得出两件事的结论,一是 valptr 和 vals 相等,并且可以以相同的方式处理,另一个事实是,由于某种原因,将 & 和 * 添加到vals 似乎没有指代任何不同的东西,这意味着以这种方式使用它们是没有用的,因为它们都指的是相同的值。

cout<<valptr[1]<<endl;//outputs 50
cout<<vals[1]<<endl;//outputs 50
cout<<*vals<<endl;//outputs 1
cout<<*valptr<<endl;//outputs 1
Run Code Online (Sandbox Code Playgroud)

上面的代码进一步加深了我的心态,valptr 和 vals 是相同的,每当我对 vals 执行某些操作,并对 valptr 执行相同的操作时,它们都会产生相同的结果

cout<<*(&valptr +1)-valptr<<endl;


cout<<endl;

cout<< *(&vals + 1) -vals<<endl;
Run Code Online (Sandbox Code Playgroud)

现在我们已经确定了我所知道的,或者我可能有的误解,现在我们继续讨论我遇到的两个主要问题,我们现在将讨论这些问题。

我的第一个困惑是cout<< *(&vals + 1) -vals<<endl;我知道这输出了数组的大小,以及它如何工作的一般概念,但我对几个部分感到困惑。如前所述,如果

cout<<vals<<endl;
cout<<&vals<<endl;
cout<<*(&vals)<<endl;
Run Code Online (Sandbox Code Playgroud)

全部打印出相同的值,为什么我需要 * 和 & ,cout<< *(&vals + 1) -vals<<endl;我知道如果我这样做,vals+1 …

c++ arrays pointers

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