- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我对2D阵列有点困惑。特别用公式a[i][j] = *(*(a+i)+j)
在提出疑问之前,我想提及一下我对符号'*'
和'&'
的看法。我认为'&'
是一个将“变量”作为操作数并给出“变量地址”的运算符,而'*'
将“变量的地址”作为操作数并给出“变量”作为输出,因此1.*(address)---->>(gives variable)
2.&(variable)---->>(gives address)
(请告诉我这个概念是否错误)
现在假设有一个二维数组“ a”,如下所示:
a[3][2]={{1,2,3},{4,5,6},{7,8,9},{10,11,12}}
a[3][2]
。
a[3][2]=*(*(a+3)+2) // 1
&a[3][0]
。
&a[0][0]
。因此代入方程式(1)
a[3][2] *(*(&a[0][0] +3)+2)
&a[0][0]
上加3意味着给出块
a[1][0]
.....(在
a[0][0]
之前的三个块)的地址。因此,此处(a + 3)已将我们指向
&a[1][0]
,而不是
&a[3][0]
。
a[3][2]=*(*(&a[3][0])+2)
*(address of variable)---->>(gives variable)
*(&a[3][0])= a[3][0]
。因此a [3] [0]应该是一个存储值10的变量。现在,我们有了
a[3][2]=*(10+2)=*(12)
。但是,现在
'*'
运算符需要地址作为输入,并且我们给出的r值不是地址,因此应该给出错误。
最佳答案
我认为'&'是一个将变量作为操作数并给出该变量地址的运算符...
这不是很正确。我们应该阐明什么是“变量”。在C语言中,通常称为变量的是标识符和对象。标识符是我们用作名称的文本字符串。例如,在int xyz;
中,“ xyz”是标识符。对象是用于表示值的内存区域。因此,在int xyz;
中,对象是编译器保留在内存中某个位置的几个字节(通常为四个)。&
运算符提供了将其应用于的对象(或函数)的地址。请注意,不需要将其应用于变量,只需将其应用于任何对象(或函数)即可。因此,除了命名对象之外,还可以将其应用于某些计算对象(如&a[i+4]
)或字符串文字(&"abc"
)或复合文字(& (int []) {3, 4, 5}
)。
…和'*'可逆地将变量的地址作为操作数,并将变量作为输出,*
获取一个指向对象(或函数,此处不再进一步讨论)的指针,并生成该对象(具体来说,是一个指定该对象的左值)。该对象不必是命名变量的对象。它可以是数组元素,也可以是动态分配的对象,也可以是其他对象。
现在假设有一个二维数组“ a”,如下所示:
a [3] [2] = {{1,2,3},{4,5,6},{7,8,9},{10,11,12}}
这不是正确的数组定义,因为它没有元素类型,并且说数组的维数是3和2,但是初始化程序列表显示维数应该是4和3。让我们将其更正为:
int a[4][3] = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9}, {10, 11, 12} };
a+3
中,
a
指定一个数组。该数组会自动转换为指向其第一个元素的指针,因此等效于
&a[0]
。请注意,此表达式的类型是3个
int
的数组-它是
a
的子数组。当我们加3时,编译器将计数3个子数组,因此
a+3
指向子数组编号3(从0开始编号)。因此,
a+3
等效于
&a[3]
。
&a[3]
是子数组编号3的地址。这与
&a[3][0]
是不相同的,它是子数组编号3的元素编号0的地址。尽管它们实际上指向内存中的同一位置,但是它们具有不同的类型,并且编译器将它们区别对待。
a
等效于
&a[0]
,它是指向
a
第一个元素的指针。
a
的第一个元素本身是一个数组;它是
a[0]
,而不是
a[0][0]
。尽管
&a[0]
和
&a[0][0]
实际上可以指向内存中的同一位置,但是它们具有不同的类型,并且编译器将对它们进行不同的处理。
a
不等同于
&a[0][0]
,因此不能用后者代替前者。
a
将自动转换为
&a[0]
。然后
&a[0]+i
计数
i
子数组,加法的结果等于
&a[i]
。然后,在
*(a+i)
中,应用
*
运算符。这会将
&a[i]
更改为
*&a[i]
。由于
&a[i]
指向
a[i]
,所以
*&a[i]
是
a[i]
。
*(a+i)
变为
a[i]
,并且我们想知道
*(a+i)+j
是什么。实际上,我们在问
a[i]+j
是什么。因此,我们必须弄清楚在此表达式中
a[i]
会发生什么。
a[i]
是
a
的子数组。因此它本身就是一个数组。在表达式中使用数组时,数组会自动转换为其第一个元素的地址(用作
sizeof
或一元
&
的操作数时除外)。因此
a[i]
转换为
&a[i][0]
。然后我们添加
j
,生成
&a[i][0] + j
。由于
&a[i][0]
是指向
int
的指针,因此编译器对
j
int
进行计数并生成指向
a[i][j]
的指针。即,
*(a+i)+j
的结果为
&a[i][j]
。然后应用
*
生成
*&a[i][j]
,即
a[i][j]
。
关于c - 通过C中的数组名称和指针访问2D数组元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54042358/
#include using namespace std; class C{ private: int value; public: C(){ value = 0;
这个问题已经有答案了: What is the difference between char a[] = ?string?; and char *p = ?string?;? (8 个回答) 已关闭
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 7 年前。 此帖子已于 8 个月
除了调试之外,是否有任何针对 c、c++ 或 c# 的测试工具,其工作原理类似于将独立函数复制粘贴到某个文本框,然后在其他文本框中输入参数? 最佳答案 也许您会考虑单元测试。我推荐你谷歌测试和谷歌模拟
我想在第二台显示器中移动一个窗口 (HWND)。问题是我尝试了很多方法,例如将分辨率加倍或输入负值,但它永远无法将窗口放在我的第二台显示器上。 关于如何在 C/C++/c# 中执行此操作的任何线索 最
我正在寻找 C/C++/C## 中不同类型 DES 的现有实现。我的运行平台是Windows XP/Vista/7。 我正在尝试编写一个 C# 程序,它将使用 DES 算法进行加密和解密。我需要一些实
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
有没有办法强制将另一个 窗口置于顶部? 不是应用程序的窗口,而是另一个已经在系统上运行的窗口。 (Windows, C/C++/C#) 最佳答案 SetWindowPos(that_window_ha
假设您可以在 C/C++ 或 Csharp 之间做出选择,并且您打算在 Windows 和 Linux 服务器上运行同一服务器的多个实例,那么构建套接字服务器应用程序的最明智选择是什么? 最佳答案 如
你们能告诉我它们之间的区别吗? 顺便问一下,有什么叫C++库或C库的吗? 最佳答案 C++ 标准库 和 C 标准库 是 C++ 和 C 标准定义的库,提供给 C++ 和 C 程序使用。那是那些词的共同
下面的测试代码,我将输出信息放在注释中。我使用的是 gcc 4.8.5 和 Centos 7.2。 #include #include class C { public:
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
我的客户将使用名为 annoucement 的结构/类与客户通信。我想我会用 C++ 编写服务器。会有很多不同的类继承annoucement。我的问题是通过网络将这些类发送给客户端 我想也许我应该使用
我在 C# 中有以下函数: public Matrix ConcatDescriptors(IList> descriptors) { int cols = descriptors[0].Co
我有一个项目要编写一个函数来对某些数据执行某些操作。我可以用 C/C++ 编写代码,但我不想与雇主共享该函数的代码。相反,我只想让他有权在他自己的代码中调用该函数。是否可以?我想到了这两种方法 - 在
我使用的是编写糟糕的第 3 方 (C/C++) Api。我从托管代码(C++/CLI)中使用它。有时会出现“访问冲突错误”。这使整个应用程序崩溃。我知道我无法处理这些错误[如果指针访问非法内存位置等,
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 7 年前。
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,因为
我有一些 C 代码,将使用 P/Invoke 从 C# 调用。我正在尝试为这个 C 函数定义一个 C# 等效项。 SomeData* DoSomething(); struct SomeData {
这个问题已经有答案了: Why are these constructs using pre and post-increment undefined behavior? (14 个回答) 已关闭 6
我是一名优秀的程序员,十分优秀!