
例如:
#include<stdioh>
int fun(int n)
{
int i;
static int a[100]; // 这里用static
for (i=0;i<n;i++) a[i]=i;
return &a[0];
}
void main()
{
int i,n=5;
int p; // 声明指针
p = fun(n); // 返回指针
for (i=0;i<n;i++) printf("%d\n",p[i]); // 把 p 看成数组来输出
}
得 0 1 2 3 4
扩展资料:
注意事项
1、数组的维度必须是一个常量表达式
int main(void)
{
constexpr int i = 20;
int j = 5;//不是常量表达式
int arr1[i];//正确
int arr2[j];//错误
system("pause");
return 0;
}
2、默认情况下,数组的元素被默认初始化。
而且需要注意的是,和内置类型的变量一样,如果在函数内部定义了某种内置类型的数组,那么默认初始化会令数组有未定义的值。
#include
void paixu(int array[],int len)
{
int t,i,j;
for (i=0;i<len-1;i++)
{
for (j=0;j<len-1-i;j++)
if (array[j]>array[j+1])
{
t=array[j];
array[j]=array[j+1];
array[j+1]=t;
}
}
}
int main ()
{
int in,i,array[128];
printf("输入一个正整数:");
scanf("%d",&in);
printf("输入%d个整数:\n",in);
for (i=0;i<in;i++)
{
scanf("%d",&array[i]);
}
paixu(array,in);
printf("排序后: ");
for (i=0;i<in;i++)
{
printf("%d ",array[i]);
}
return 0;
}
1、我们首先定义一个二级指针和一个行列变量[int array,row,column;]。
2、然后我们编写进入行和列的语句,代码如图所示。
3、接下来我们可以用一维数组打开一维一维数组。
4、接下来,我们使用[array [i] =(int )malloc(sizeof(int) column);]来为数组再次生成包含该数组的新数组。
5、然后我们可以为它赋值并输出[代码如图所示]。
6、运行程序后我们可以看到这种效果。
f(a+1)是调用函数f(int b[])。实参是a+1,就是数组a的第二个元素所在的位置。
本程序的输出结果是:
1
7
12
11
13
7
据此不难看出,函数f()是将数组a[1]开始的每一个小于等于10的元素,加上2后,重新输出。
对于有数组参数的函数,编译程序要为其开辟相应的内存空间,而程序中两个函数
都有数组参数a[n][m],由于n,m是变量,编译程序并不知道n,m的具体值,所以不能
通过编译。
修改:
1在#include<>下面添加以下伪指令:
#define n 5
#define m 5
2将函数的参数形式改为:
int sum(int a[n][m]);
void pl(int a[n][m]);
并按此修改程序文件中所有关于这两个函数的申明和调用即可
int x = 2
int y = F(x)
函数F里如果出现x=3,那么回归后主程序里x还是2,因为递给函数的只是个拷贝
如果
int x[] = {2,3}
int y = F(x)
这时递进去的是数组首地址,所以在函数里如果出现x[0]=1,那么主程序里的x也会变成{1,3}, 因为虽然函数拿到的x是一个拷贝,但因为它是地址,所以直接改变该地址的数据还是会有影响
错误太多了 1是getchar不是getschar
2 你的数组a与数组ar全乱套了 char w(char ar[4][6]);//13行你想传递谁?乱套了
3最严重的一点 数组不能作为函数参数传递 只有以下三种传递形式
按值传递(pass by value)
地址传递(pass by pointer)
引用传递(pass by reference)
想传递数组可通过指针 地址 你好好改 发个txt上来
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)