C 内存分配(malloc)

标签 c

#include <stdio.h>
#include <stdlib.h>
int main()
{
    int *p, n, i;
    printf("Enter the size of the array:");
    scanf("%d", &n);
    p = (int *)malloc(n * sizeof(int));
    for (i = 0; i < n; i++)
    {
        printf("\n Enter element %d:", i + 1);
        scanf("%d", &p[i]);
    }
    for (i = 0; i < n; i++)
        printf("\n %d", p[i]);
    return 0;
}

为什么我们需要写&在scanf中,如果它是一个数组,那就没有必要了? p是一个指向所有内存空间的指针,所以 &p[i]应该给出指针的地址,但不是我们想要存储数据的位置,对吧? 另外,如果我们写 *p[i]printf ,它给出一个错误,p是一个指针,所以我们应该尊重它并将数据存储在内存中的保留空间中,但它不起作用?即使我按原样编译上述程序,它也会在接受 3 个值作为输入后停止工作。

最佳答案

下标运算符 [] 也执行取消引用。它同时执行索引和取消引用。 p[n] 相当于 *(p+n),即它转到一个偏移量并取消引用它。因此,&p[n] 相当于 p+n

关于C 内存分配(malloc),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27444664/

相关文章:

c - 从不同端口移动位并将其存储在内存中

c - 仅当项目中发生更改时添加编译时间戳 (C)

c - 获取C中最高权限的工作路径

c - 强制 printf 忽略格式

c - 错误 : Invalid argument; while sending msgsnd() message; not matching queue ID

c - pcap_inject 在断开连接的接口(interface)上

c - 二叉树分割错误

c++ - 将一个字符串解析为多个字符串

c - C语言中如何找到数组中最大值的位置

c - C/C++ 编程中%0x%x 是什么意思?