C专家编程笔记之数组和结构体中的数组

来源:互联网 发布:惠伦模型 知乎 编辑:程序博客网 时间:2024/06/06 00:25

一个数组作为函数参数时,只传递数组首地址的副本给函数;所以,在函数中修改数组元素,就会改变数组元素的值。但是,如果把数组定义在结构体内,作为结构体的一个元素,则当使用结构体作为参数时,会把整个结构体都复制一份,这样结构体内的数组也全部复制了,而不是数组的首地址。所以,在函数内改变结构体内的数组元素,不会改变函数外的结构体内的数组元素。

同时,不能返回数组,只能返回数组指针,也不能在函数内定义的数组的指针,因为是在栈区。但是,可一个返回结构体,如果结构体内有数组,数组也会一并返回。

所以,使用结构体作为形参或返回类型,都是把它复制一个副本传过去。

<pre name="code" class="cpp">

#include <stdio.h>typedef struct intArray{    int arr[5];}intArray;/* * 一个数组作为函数参数时,只传递数组首地址的副本给函数;所以,在函数中修改数组 * 元素,就会改变数组元素的值。但是,如果把数组定义在结构体内,作为结构体的一个 * 元素,则当使用结构体作为参数时,会把整个结构体都复制一份,这样结构体内的数组 * 也全部复制了,而不是数组的首地址。所以,在函数内改变结构体内的数组元素,不会 * 改变函数外的结构体内的数组元素。 */intArray fun(intArray arr){    int i;    intArray a;    for(i=0;i<5;i++)        a.arr[i]=arr.arr[i]+100;    return a;}int main(void){    intArray arr,b;    int i;    for(i=0;i<5;i++)        printf("%d ",arr.arr[i]=i+1);    printf("\n");    b=fun(arr);    for(i=0;i<5;i++)        printf("%d ",b.arr[i]);    printf("\n");    for(i=0;i<5;i++)        printf("%d ",arr.arr[i]=i+1);    printf("\n");    printf("Hello World!\n");    return 0;}



0 0
原创粉丝点击