我不知道我做错了什么我在过去的两个小时里坚持这个。任何帮助都将受到高度赞赏。
我的代码如下: -
#include <stdio.h>
int* findLargest(int* arr,int size){
return &arr[size-1];
}
int main(){
int size=3;
int arr[3]={3,4,5};
int* largest=&arr[size-1];
int* largest2=malloc(100);
largest2=findLargest(*arr,size);
printf("%d",largest);
printf("%d",*largest2);
}
执行时我得到一个垃圾值。
答案 0 :(得分:3)
只将arr
传递给findLargest,这已经是一个指针
largest2=findLargest(arr,size);
printf内容最大,而不是指针本身
printf("%d\n", *largest);
另外,我不确定为什么你有这条线:
int* largest2=malloc(100);
当你再次分配给large2时,malloc指针会在下一行中立即丢失。
我还会考虑像这样分配size
:
int size = sizeof(arr)/sizeof(arr[0]);
如果您将来更改arr
的内容,这会更安全。
所有这些变化主要看起来像:
int main()
{
int arr[3]={3,4,5};
size_t size = sizeof(arr)/sizeof(arr[0]);
int* largest=&arr[size-1];
int* largest2=findLargest(arr,size); // Only pass array to findLargest, this is already a pointer
printf("%d\n", *largest); // printf contents of largest, not the pointer
printf("%d\n", *largest2);
}
答案 1 :(得分:1)
这里的问题是这一行
printf("%d",largest);
您没有取消引用指针的位置。在价值导致更多混乱之后,也没有空格或新线。
答案 2 :(得分:0)
你不能编辑指针的地址,你要编辑指针的值 像这样:
int * v = malloc(sizeof(int)); //WRONG
int n=54;
v=&n;
int * v = malloc(sizeof(int)); //CORRECT
int n=54;
*v=n;
答案 3 :(得分:-2)
嗯,问题很简单。万一有人遇到这种混乱,这可能有所帮助。
正确的代码是:
std::bind