当前位置: 首页 > 知识库问答 >
问题:

指针算术题(数组大小)[C++][重复]

洪俊捷
2023-03-14
#include <bits/stdc++.h> 
using namespace std; 

int main() 
{ 
    int  arr[] = {1, 2, 3, 4, 5, 6}; 
    int size = *(&arr + 1) - arr; 

    return 0; 
} 

int size=*(&arr+1)-arr;如何精确地找到数组的大小?我读了geeksforgeeks的解释,仍然有点困惑。我想如果你取消引用(&arr+1),那么它会给你一个不存在的值,因为你跳过了前面的6个整数,这可能是内存地址中的任何随机值?而且,如果您能够取消对int类型的引用(&arr+1),那么您如何能够从arr中减去该值呢?

共有1个答案

曹育
2023-03-14

*(&arr+1)-arr是编写6的一种相当复杂的方法。

&arr是指向int[6]的指针

(&arr+1)是指向int[6]的指针,该指针在arr处的一个之后开始,即它在内存中的6int更高。

*(&arr+1)arr后面虚数组。那里没有数组,但我们不打算使用它,所以没关系。

*(&arr+1)-arr中,在应用差分操作之前,两个整数数组被转换为指向它们的第一个元素的int*指针。由于这些数组在内存中相距6ints,所以在这两个指针之间有6ints,结果是6。

 类似资料:
  • 我正在编写一个简单的函数,它返回数组中最大的整数。我遇到的问题是在数组中找到元素的数量。 下面是函数头: 我如何获得数组'list'中的整数数。 我试过以下几种方法: 任何帮助都将不胜感激!

  • C++ 指针 指针是一个用数值表示的地址。因此,您可以对指针执行算术运算。可以对指针进行四种算术运算:++、--、+、-。 假设 ptr 是一个指向地址 1000 的整型指针,是一个 32 位的整数,让我们对该指针执行下列的算术运算: ptr++ 在执行完上述的运算之后,ptr 将指向位置 1004,因为 ptr 每增加一次,它都将指向下一个整数位置,即当前位置往后移 4 个字节。这个运算会在

  • C++ 指针 在我们讲解指针数组的概念之前,先让我们来看一个实例,它用到了一个由 3 个整数组成的数组:#include <iostream> using namespace std; const int MAX = 3; int main () { int var[MAX] = {10, 100, 200}; for (int i = 0; i < MAX; i++) { cout << "Va

  • null 这是正确的理解吗?如果是这样,那么在使用指针与malloc()连接时,是否总是使用数组算术是明智的? 谢谢你,亚历克斯

  • C++ 指针 指针和数组是密切相关的。事实上,指针和数组在很多情况下是可以互换的。例如,一个指向数组开头的指针,可以通过使用指针的算术运算或数组索引来访问数组。请看下面的程序:#include <iostream> using namespace std; const int MAX = 3; int main () { int var[MAX] = {10, 100, 200}; int *pt

  • 正如在主要章节中所解释的,Pascal指针是一个地址,它是存储在单词中的数值。 因此,您可以像对数值一样对指针执行算术运算。 有四个算术运算符可用于指针:递增,递减,+和 - 。 为了理解指针运算,让我们考虑ptr是一个整数指针,它指向地址1000.假设32位整数,让我们对指针执行递增操作 - Inc(ptr); 现在,在上述操作之后, ptr将指向位置1004,因为每次ptr递增时,它将指向下