关于指针函数与指针数组的若干问题归纳
1.C语言中计算数组的占用内存及数组元素个数的语句
int nums[4] = {2,7,12,13};
int numsSize = sizeof(nums);
int numsCount = sizeof(nums)/sizeof(int);
2.C语言中如何返回一个数组
在C语言中,无法直接返回一个数组,可通过返回对应类型指针的方式返回数组。
#include<stdio.h>
#include<stdlib.h>
int* twoSum(int* nums, int numsSize, int target)
{
int flag = 0; //标记是否找到,0未找到
int *temp = (int * ) malloc (sizeof (int) * 2); //开辟内存,用于保存等会返回的值
for(int i = 0; i < numsSize-1; i++)
{
for(int j = i+1; j < numsSize; j++)
{
if(target == nums[i] + nums[j]) //找到后则保存起来,且标记
{
temp[0] = i;
temp[1] = j;
flag = 1;
break; //找到后跳出循环
}
}
if(1 == flag) //找到后跳出循环
break;
}
return temp; //返回开辟了内存空间的指针数组
}
int main()
{
int nums[4] = {2,7,11,18};
int numsSize = sizeof(nums);
int target = 9;
int *p; //定义指针来接返回值
p = twoSum(nums, numsSize, target);
printf("[%d,%d]\n", p[0],p[1]); //输出两数的下标
return 0;
}
3.C语言中如何去接一个返回的数组
#include<stdio.h>
int *arry ( int a[]); //指针函数前置声明
int main ()
{
int a[] = {0,1,0,1,1,0,1,0}; //定义数组并初始化
int *b = arry(a); //定义整型指针b来指向返回值
for(int i = 0; i < 8; i++) //将数组的遍历输出
{
printf("%d ", a[i]);
}
return 0;
}
int *arry(int a[])
{
for(int i = 0; i < 8; i++) //将原数组中的01位置变换
{
if (a[i] == 0)
{
a[i] = 1;
}
else
{
a[i] = 0;
}
}
return a; //返回数组a的首地址
}
****************************************************************************