我试图在必须返回指向数组第一个元素的指针的地方编写代码。
我尝试使用此功能:-
public class LoginFacadeImpl implements LoginFacadeInt {
@Value("${project.ldap.authentication}")
private Boolean isProjectLDAPAuthenticationEnabled;
@Override
public UserDto authenticateUser(String userName, String password) {
try {
authenticateViaLDAP(userName, password);
} catch (Exception e1) {
//do authetication against database
UserEntity userEntityForAuthentication =
UserManagementDaoInt.authenticateUser(userName,
AuthenticationUtils.convertPasswordToSha256(password));
}
这给了我错误。 但是当我这样声明相同的数组时:
int *construct(int arr[],int n)
{
int size=(int)(ceil(log2(n)));
size=2*pow(2,size)-1;
int st[size];
for(int i=0;i<size;i++)
st[i]=INT_MAX;
constructUtil(arr,st,0,n-1,0);
int *pt=&st[0];
return pt;
}
成功执行。
这两者有什么区别?
答案 0 :(得分:1)
您无法在C中返回指向本地数组的指针。您必须使用malloc
来分配内存并为数组生成指向内存区域的指针。现在您可以返回指针,并且内存保持有效:
#include <stdio.h>
#include <stdlib.h>
int* construct(int n);
int main()
{
int* ArrayPointer = construct(100);
printf("Address: %p", ArrayPointer);
for(int i = 0; i < 100; i++)
{
printf("%i\n\r", ArrayPointer[i]);
}
free(ArrayPointer);
return 0;
}
int* construct(int n)
{
int* array = (int*)malloc(n * sizeof(int));
for(int i = 0; i < n; i++)
{
array[i] = i;
}
return array;
}
指令new
的功能类似于malloc
函数(不完全相同)。 new
的关键操作是要求操作系统为动态分配分配一些可用内存(例如malloc
,但来自另一个内存池)。查看malloc
和new
here之间的区别。另一个选择(没有动态内存)是声明一个固定大小的静态数组。因此,编译器将保留内存,您可以将该数组的地址传递给函数