int *bubble_sort(int[]);
void main()
{
int arr[10]={ 10, 9, 7, 101, 23, 44, 12, 78, 34, 23};
printf("\n%d\n",bubble_sort(arr));
int *p = bubble_sort(arr);
printf("\nprinting sorted elements ...\n");
for(int i=0;i<10;i++)
printf("%d\n",p[i]);
return 0;
}
int *bubble_sort(int a[])
{
int i,j,temp;
for(i=0;i<10;i++)
{
for(j=0;j<10;j++)
{
if(a[j]>a[j+1])
{
temp = a[j];
a[j]=a[j+1];
a[j+1] = temp;
}
}
}
printf("%d",a);
return a;
}在main函数中,我调用冒泡排序,它返回数组的基位置并打印该位置。即使它指向相同的内存位置,仍然打印地址两次。请分享您对此行为的看法。要分析的行"printf("\n%d\n",bubble_sort(arr));“
发布于 2021-06-06 12:12:48
您在函数外部和函数内部打印的地址将是相同的。它是arr中第一个元素&arr[0]的地址,它将在您的程序中打印三次。
bubble_sort两次,因此将在bubble_sort内部打印两次。main.中打印一次地址
一些问题:
void main()不是有效的main签名。它应该返回intfor(j=0;j<10;j++),而a[j+1]会使你的程序具有未定义的行为。当j为9printf("%d", a);时,您将越界访问a,并且printf("\n%d\n",bubble_sort(arr));还会使您的程序具有未定义的行为,因为您为%d转换说明符提供了一个地址。在不必要的情况下使用%p打印pointers.bubble_sort两次为unnecessary.建议的更改:
#include <stdio.h>
int* bubble_sort(int a[], int length) { /* take the length as an argument */
int i, j, temp;
for(i = 0; i < length; i++) { /* 0 up to 9 */
for(j = length - 1; j > i; j--) { /* 9 down to i + 1 */
if(a[j] < a[j - 1]) {
temp = a[j];
a[j] = a[j - 1];
a[j - 1] = temp;
}
}
}
printf("in bubble_sort: %p\n", (void*)a); /* %p to print pointers */
return a;
}
int main(void) {
int arr[10] = {10, 9, 7, 101, 23, 44, 12, 78, 34, 23};
int* p = bubble_sort(arr, sizeof(arr) / sizeof(arr[0])); /* call once only */
printf("in main: %p\n", (void*)p); /* %p to print pointers */
printf("\nprinting sorted elements ...\n");
for(int i = 0; i < 10; i++) printf("%d\n", p[i]);
return 0;
}可能的输出:
in bubble_sort: 0x7ffc91ff68d0
in main: 0x7ffc91ff68d0
printing sorted elements ...
7
9
10
12
23
23
34
44
78
101发布于 2021-06-06 13:37:24
要回答为什么要打印2次(实际上是3次)地址
从下面的代码
int arr[10]={ 10, 9, 7, 101, 23, 44, 12, 78, 34, 23};
printf("\n%d\n",bubble_sort(arr));
int *p = bubble_sort(arr);有两次对bubble_sort()的函数调用-注意,在bubble_sort()函数中也打印了数组的地址。所有这三个地址都指向arr[]的起始地址。
因此3次地址打印来自于
从线路printf("\n%d\n",bubble_sort(arr));
printf,另一次来自bubble_sort(arr)函数调用)来自int *p = bubble_sort(arr);的
https://stackoverflow.com/questions/67855597
复制相似问题