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
- C专家编程笔记之数组和结构体中的数组
- C 专家编程笔记(三) 数组和指针
- 数组和指针(c专家编程学习笔记)
- C专家编程学习之第四章 数组和指针
- 数组和指针 [C专家编程]
- 《C专家编程》数组和指针并不同--多维数组
- 《C专家编程》的笔记-指针与数组的区别
- 《C专家编程》学习笔记——再论数组
- 《C专家编程》笔记——数组与指针
- 《c专家编程》笔记--数组和指针参数是如何被编译器修改的
- 《C专家编程》学习笔记(令人震撼的事实:数组和指针并不相同)
- C专家编程》笔记三:第四章 数组和指针并不相同
- 《C专家编程》笔记三:数组和指针实参所对应的形式参数
- C中的数组、结构体
- 《C专家编程》读书笔记之 指针与数组
- 《c专家编程》中指针和数组几点说明
- C专家编程-数组和指针并不相同
- 《C专家编程》:指针和数组的区别详解(四)
- Java中使用Log4j记录日志
- x-code操作
- 技术与经济之五:关于货币市场
- 廖雪峰javascrip学习笔记<基础>
- 范式
- C专家编程笔记之数组和结构体中的数组
- 从现在看未来,在未来看现在
- [数据结构]求二叉树的深度与宽度
- 解决投影仪放映PPT时左右、上下出现黑边问题
- WebSocket即时聊天
- 3.2.2 正则表达式的功能
- Windows进程间各种通信方式浅谈
- UITextField的UIControlEventValueChanged事件
- Java学习笔记------------如何启用jre包中的:sun.net.ftp