gpt4 book ai didi

c - malloc和指针代码演示

转载 作者:行者123 更新时间:2023-11-30 19:11:28 24 4
gpt4 key购买 nike

我对指针和malloc的了解还不够!我尝试看书,但没有弄清楚,我无法理解这些代码行:

L = (int*)malloc(mid*sizeof(int));
R = (int*)malloc((n- mid)*sizeof(int));

LR 实际上有什么值?

for(i = 0;i<mid;i++) L[i] = A[i]; 
for(i = mid;i<n;i++) R[i-mid] = A[i];

在 for 循环中我看到 L 和 R 的索引号为 no?我很困惑L 和 R 为何充当数组

完整代码:

void MergeSort(int *A,int n) {
int mid,i, *L, *R;
if(n < 2) return; // base condition. If the array has less than two element, do nothing.

mid = n/2; // find the mid index.

// create left and right subarrays
// mid elements (from index 0 till mid-1) should be part of left sub-array
// and (n-mid) elements (from mid to n-1) will be part of right sub-array
L = (int*)malloc(mid*sizeof(int));
R = (int*)malloc((n- mid)*sizeof(int));

for(i = 0;i<mid;i++) L[i] = A[i]; // creating left subarray
for(i = mid;i<n;i++) R[i-mid] = A[i]; // creating right subarray

MergeSort(L,mid); // sorting the left subarray
MergeSort(R,n-mid); // sorting the right subarray
Merge(A,L,mid,R,n-mid); // Merging L and R into A as sorted list.
free(L);
free(R);
}

最佳答案

指针实际上只是内存位置的地址。

指针变量的值是指针指向的地址。

The malloc function在内存中的某个位置分配一 block 字节(该内存位于何处无关)。它返回指向该内存的第一个字节的指针。

<小时/>

从视觉上看,指针及其指向的内容可以如下所示:

+---------+      +------------+| pointer | ---> | Memory ... |+---------+      +------------+

您还可以看到 malloc 作为数组返回的内存。从您的示例中获取部分代码,如果 mid5 那么您将得到如下内容:

+---+      +------+------+------+------+------+------+| L | ---> [ L[0] | L[1] | L[2] | L[3] | L[4] | .... |+---+      +------+------+------+------+------+------+

也就是说,变量L指向分配的“数组”中的第一个元素(L[0])。

请注意,malloc 分配的“数组”实际上是没有尽头的。 C 没有任何边界检查,并且编译器不会因使用超出范围的索引而给出任何错误或警告(例如 L[5] 使用上面的示例)。它将导致未定义的行为,并可能导致崩溃或奇怪的行为,但您仍然可以访问甚至写入该元素。

另请注意,使用 sizeof 运算符获取指针的大小不会返回它指向的内存的大小,而是返回指针本身的大小。例如,执行 sizeof L 不会返回 midmid * sizeof(int)。它将返回指针变量 L 的大小,通常为 48,具体取决于您使用的是 32 位还是 64 位系统。

关于c - malloc和指针代码演示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40012130/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com