#include<stdio.h>
struct Arr
{
int *pBase; //存储数组第一个元素的地址
int len; //数组所能容纳的最大元素的个数
int cnt; //当前数组有效元素个数
};
void init_arr(struct Arr array); //初始化数组
int main(){
struct Arr arr;
init_arr(arr);
printf("%d\n",arr.len);
return 0;
}
void init_arr(struct Arr array){
array.len=99;
}
上述通过对形参的修改,并没有改变实参的值,即以上不能初始化数组的长度,
image.png需要使用指针变量,来让形参指向实参的地址,才能通过调用改变实参的值
无论一个变量有多大,它的地址只用第一个字节的地址表示只占4个字节
&:取地址符
&arr代表arr的地址
关键代码如下:
void init_arr(struct Arr *pArr); //初始化数组
int main(){
struct Arr arr;
init_arr(&arr);
printf("%d\n",arr.len);
return 0;
}
void init_arr(struct Arr *pArr){
//这样,*pArr就代表了实参中的arr
(*pArr).len=99;
}
image.png
进阶:
pArr->pBase:指针变量pArr指向结构体变量中pBase这个成员
#include<stdio.h>
struct Arr
{
int *pBase; //存储数组第一个元素的地址
int len; //数组所能容纳的最大元素的个数
int cnt; //当前数组有效元素个数
};
void init_arr(struct Arr *pArr,int length); //初始化数组
int main(){
struct Arr arr;
init_arr(arr);
printf("%d\n",arr.len);
return 0;
}
void init_arr(struct Arr *pArr,int length){
pArr->pBase=(int*)malloc(sizeof(int)*length);//为其分配内存
//此时分配的有24个字节,但是只是把第一个字节赋给pBase
if(NULL==pArr->pBase){
printf("动态内存分配失败\n");
exit(-1);//终止整个程序
}
else{
pArr->len=length;
pArr->cnt=0;
return ;
}
}
网友评论