当前位置 博文首页 > 谁吃薄荷糖:【??C语言函数传参の结构体数组篇??】
C语言中函数参数传递的两种方式(“引用传递做函数参数”是C++的特性,C语言不支持。)
(1)传值,就是把你的变量的值传递给函数的形式参数,实际就是用变量的值来新生成一个形式参数,因而在函数里对形参的改变不会影响到函数外的变量的值。
(2)传址,就是传变量的地址赋给函数里形式参数的指针,使指针指向真实的变量的地址,因为对指针所指地址的内容的改变能反映到函数外,也就是能改变函数外的变量的值。一般有变量地址作为参数、数组名作为参数、指针作为参数。
下面的demo中:
test函数以结构体数组名为形参;
test1函数以结构体数组的首地址和数组大小作为形参;
test2函数是把结构体数组的首地址传入,然后以数组的形式遍历;
#include <stdio.h>
#include <string.h>
#define MAXNUM (2)
typedef struct tagNumber
{
int i;
int j;
int k;
}TNum;
typedef struct tagNumbers
{
TNum atNum[MAXNUM];
}TNums;
// 结构体数组名
void test (TNums atNums1[])
{
printf("atNums1 ptr:%p\r\n",atNums1);
int idx = 0;
int idx1 = 0;
for(idx = 0; idx < MAXNUM; idx++)
{
for(idx1 = 0; idx1 < MAXNUM; idx1++)
{
printf("i:%d\n",atNums1[idx].atNum[idx1].i);
printf("j:%d\n",atNums1[idx].atNum[idx1].j);
printf("k:%d\n",atNums1[idx].atNum[idx1].k);
}
}
}
//结构体指针1.0
void test1(TNums *ptNum,int num)
{
printf("ptNum ptr:%p\r\n",ptNum);
int idx = 0;
int idx1 = 0;
for(idx = 0; idx < num; idx++)
{
for(idx1 = 0; idx1 < num; idx1++)
{
printf("i:%d\n",(ptNum + idx)->atNum[idx1].i);
printf("j:%d\n",(ptNum + idx)->atNum[idx1].j);
printf("k:%d\n",(ptNum + idx)->atNum[idx1].k);
}
}
}
//结构体指针1.1
void test2(TNums *ptNum)
{
printf("ptNum ptr:%p\r\n",ptNum);
int idx = 0;
int idx1 = 0;
for(idx = 0; idx < MAXNUM; idx++)
{
for(idx1 = 0; idx1 < MAXNUM; idx1++)
{
printf("i:%d\n",ptNum[idx].atNum[idx1].i);
printf("j:%d\n",ptNum[idx].atNum[idx1].j);
printf("k:%d\n",ptNum[idx].atNum[idx1].k);
}
}
}
int main() {
TNums atNums[MAXNUM];
memset(atNums, 0, sizeof(atNums));
int idx = 0;
int idx1 = 0;
for(idx = 0; idx < MAXNUM; idx++)
{
for(idx1 = 0; idx1 < MAXNUM; idx1++)
{
atNums[idx].atNum[idx1].i = 1+idx;
atNums[idx].atNum[idx1].j = 2+idx;
atNums[idx].atNum[idx1].k = 3+idx;
}
}
printf("atNums ptr:%p\r\n",atNums);
printf("func 1:\r\n");
test(atNums);
printf("func 2:\r\n");
test1(atNums, MAXNUM);
printf("func 3:\r\n");
test2(atNums);
return 0;
}
打印信息:
atNums ptr:0x7fff87dba270
func 1:
atNums1 ptr:0x7fff87dba270
i:1
j:2
k:3
i:1
j:2
k:3
i:2
j:3
k:4
i:2
j:3
k:4
func 2:
ptNum ptr:0x7fff87dba270
i:1
j:2
k:3
i:1
j:2
k:3
i:2
j:3
k:4
i:2
j:3
k:4
func 3:
ptNum ptr:0x7fff87dba270
i:1
j:2
k:3
i:1
j:2
k:3
i:2
j:3
k:4
i:2
j:3
k:4
cshttp://www.oh100.com/kaoshi/c/536660.html