将整数数组插入指针数组?

Posted

技术标签:

【中文标题】将整数数组插入指针数组?【英文标题】:Inserting a Integer Array into a Pointer Array? 【发布时间】:2021-07-02 02:19:54 【问题描述】:

谁能告诉我这是如何编译的。如何将整数数组元素分配给指针数组元素?奇怪的是,输出表明 nums[i] 是整数而不是指针,但是 nums 被定义为指针。

#include <iostream>
int main() 
   int n;
    int *nums = NULL;
    nums = new int[n];  // Assign pointer nums to a address in heap allocated for a integer array of n-elements.
    n=5;
    int Array[n] = 5,4,3,6,8;
    
    for(int i=0; i<n; i++) 
    
   nums [i] = Array[i];
   std::cout << nums[i] << " , " << &nums[i] << std::endl;
    

    delete []nums;

    return 0;

我得到以下输出:

5 , 0x786cd0
4 , 0x786cd4
3 , 0x786cd8
6 , 0x786cdc
8 , 0x786ce0

感谢您的帮助

【问题讨论】:

nums 是一个指针,nums[i] 取消引用索引 i 处的指针 这能回答你的问题吗? What does "dereferencing" a pointer mean? 【参考方案1】:

如何将整数数组元素分配给指针数组元素?

nums 是指向int 元素的动态数组的指针,在本例中指向数组中的第一个int。取消引用nums[i] 会产生一个int&amp; 对数组中ith 元素的引用。

Arrayint 元素的固定数组。当通过名称访问固定数组时,它衰减为指向第一个元素的指针。因此,取消对 Array[i] 的引用也会产生一个 int&amp; 对数组中第 ith 元素的引用。

因此,nums[i] = Array[i]; 只是将int 分配给int。这没什么奇怪的。

输出表明nums[i] 是一个整数而不是一个指针

没错,就是这样。

然而nums 被定义为一个指针

这也是正确的。它是一个指向int 的指针,在本例中是动态数组中的第一个int


另外,附带说明一下,您的代码有未定义的行为,因为n 在用于分配nums 时未初始化,而int Array[n] 是non-standard behavior,因为n 不是一个编译时常量。

【讨论】:

我猜他们认为nums 会以某种方式成为一个指针数组。

以上是关于将整数数组插入指针数组?的主要内容,如果未能解决你的问题,请参考以下文章

数组和指针

C语言指针Ⅶ 指针运算指针+-整数指针-指针指针的关系运算标准关系标准规定指针和数组二级指针指针数组。

c语言指针数组排序?

数组与指针分析

C语言指针将数组中n个整数按相反顺序存放

数组和指针的联系