为什么int类型的指针不能用数组来接收,但是数组作为实参,形参又可以用int来接收。
那如果我要返回一个数组,该如何做呢?
返回数据很好处理啊,在输入参数里返回就行了,return 只能返回数值。
int arr[10];
int fun(int *par)
{
int arr1[10]={1,2,3,4,5,6,7,8,9,10};
memcpy(par,arr1,sizeof(arr1));
}
void main()
{
fun(arr);
}
通过以上函数,就可以fun函数的数据,复制到全局变量arr的数组。希望对你有帮助。
int类型的指针变量只能指向一个int类型的变量,而数组是由多个元素组成的集合。因此,如果用int类型的指针变量来接收一个数组,那只能接收到数组的第一个元素。如果你想接收整个数组,你可以用指向数组的指针,而不是int类型的指针。
如果你要返回一个数组,你需要使用指针。你可以定义一个指向数组的指针,然后在函数中动态分配数组空间,将指针指向数组的第一个元素,并在函数结束后返回指针。示例代码如下:
#include <stdio.h>
#include <stdlib.h>
int *create(int n)
{
int *a = (int *)malloc(n * sizeof(int)); //动态分配n个int类型的空间
for (int i = 0; i < n; i++)
{
a[i] = i; //赋值
}
return a; //返回指向数组首地址的指针
}
int main()
{
int n = 10;
int *p = create(n); //调用函数返回数组
for (int i = 0; i < n; i++)
{
printf("%d ", p[i]); //输出数组中的元素
}
printf("\n");
free(p); //释放动态分配的空间
return 0;
}
在使用完毕后,需要使用free()函数释放动态分配的空间,否则会出现内存泄漏。
返回数组就直接用指针接收就行了,如果是C++的话,可以用更加清晰明了的
vector<int> fun();
来声明函数,直接返回vector变量就好
// 位域内存测试
#include <stdio.h>
struct ONE_BYTE
{
unsigned char _bool : 1;
unsigned char del_flag : 1;
unsigned char status : 4;
} one_byte;
struct TWO_BYTE
{
unsigned char ccc1 : 4;
unsigned char ccc2 : 4;
unsigned char ccc3 : 4;
unsigned char ccc4 : 4;
} two_byte;
struct THREE_BYTE
{
unsigned char ccc1 : 4;
unsigned char ccc2 : 4;
unsigned char ccc3 : 4;
unsigned char ccc4 : 4;
unsigned char ccc5 : 4;
} three_byte;
struct FOUR_BYTE
{
unsigned int ccc1 : 16;
unsigned int ccc2 : 16;
} four_byte;
int main(int argc, char const *argv[])
{
printf("sizeof one_byte is : %lu\n", sizeof(one_byte));
printf("sizeof two_byte is : %lu\n", sizeof(two_byte));
printf("sizeof three_byte is : %lu\n", sizeof(three_byte));
printf("sizeof four_byte is : %lu\n", sizeof(four_byte));
return 0;
}