需要给一级指针赋值的话,就需要二级指针去取一级指针的地址,然后赋值。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX_CLIENT 4
typedef struct {
int *array[MAX_CLIENT];
int a;
int b;
}DATA_T;
static DATA_T *date_p = NULL;
int *malloc_array(int a)
{
int *p = (int *)calloc(1, sizeof(int));
*p = a;
return p;
}
/* 错误函数
执行下面的print_test没有任何输出
因为直接一级指针赋值就跟临时变量赋值是一个效果,
出了函数,值就丢了!!
*/
/* void create_array(int idx, int a)
{
int *p = date_p->array[idx];
p = malloc_array(a);
*p += 1000;
} */
/* 正确函数
先取一级指针的地址,然后赋值
下面的print_test输出如下
array[0]=1300
array[1]=1400
*/
void create_array(int idx, int a)
{
int **p = &(date_p->array[idx]);
*p = malloc_array(a);
**p += 1000;
}
void call1()
{
create_array(0, 300);
}
void call2()
{
create_array(1, 400);
}
void print_test()
{
int i = 0;
for(i=0;i<MAX_CLIENT;i++) {
if(date_p->array[i]){
printf("array[%d]=%d\n",i,*(date_p->array[i]));
}
}
}
int main()
{
date_p = (DATA_T *)calloc(1, sizeof(DATA_T));
date_p->a = 100;
date_p->b = 200;
call1();
call2();
print_test();
}