1、2022-6-232/422022-6-233/42.12342022-6-234/42.12342022-6-235/42.1234for (i=0; i4; i+) scanf(%d, &ai); for (i=0; i4; i+) printf(%d , ai);for (p=a; p(a+4); p+) scanf(%d, p); for (p=a; p(a+4); p+) printf(%d , *p);2022-6-236/42【例例11.111.1】演示数组元素的引用方法演示数组元素的引用方法 2022-6-237/42【例例11.111.1】演示数组元素的引用方法演示数组元素的
2、引用方法 2022-6-238/42【例例11.211.2】演示数组和指针变量作函数参数演示数组和指针变量作函数参数 被调函数的形参声明为被调函数的形参声明为数组类型,用下标法访数组类型,用下标法访问数组元素问数组元素2022-6-239/42【例例11.211.2】演示数组和指针变量作函数参数演示数组和指针变量作函数参数 被调函数的形参声明为被调函数的形参声明为指针指针类型类型,用指针法访,用指针法访问数组元素问数组元素2022-6-2310/42【例例11.211.2】演示数组和指针变量作函数参数演示数组和指针变量作函数参数 在主函数中这样做没有在主函数中这样做没有多大的实际意义多大的实际
3、意义2022-6-2311/42a00a01a02a10a11a12a0+1a0+2&a11a1+1&a12&a01&a02 a00 a0a01a02a10 a1 a11a12 a a1+2 a23;2022-6-2312/42a00a01a02a10a11a12 a00 a0a01a02a10 a1 a11a12 a a23;a 代表代表二二维数组的首地址,维数组的首地址,第第0 0行行的地址,的地址,a + i 代表代表第第i i行行的地址的地址但并非增加但并非增加i i个字节!个字节!2022-6-2313/42a00a01a02a10a11a12 a00 a0a01a02a10 a1
4、a11a12 a a23;*(a + i) 即即 ai 代表代表第第i行行的地址的地址,*(a+i) + j 即即 ai + j代表代表第第i行行的地址的地址&aij &a12a1+22022-6-2314/42a00a01a02a10a11a12 a00 a0a01a02a10 a1 a11a12 a a23;&a12a1+2( *(a+i) + j ) 即即 aij 代表代表第第i行第行第j列列的的*(a + i) 即即 ai 代表代表第第i行行的地址的地址,*(a+i) + j 即即 ai + j代表代表第第i行行的地址的地址&aij 2022-6-2315/42p a23;a00a01
5、a02a10a112022-6-2316/42p a23;a00a01a02a10a11a122022-6-2317/42 a23;a00a01a02a10a11a12p2022-6-2318/42p a23;a00a01a02a10a11a12p2022-6-2319/42【例例11.311.3】输入一个输入一个3 3行行4 4列的列的二维数组,然后输出这个二维数组,然后输出这个二维数组的元素值二维数组的元素值 2022-6-2320/42【例例11.311.3】输入一个输入一个3 3行行4 4列的二维数组,然后输出列的二维数组,然后输出这个二维数组的元素值这个二维数组的元素值 形参声明为列
6、数已知的形参声明为列数已知的二维数组二维数组2022-6-2321/42【例例11.311.3】输入一个输入一个3 3行行4 4列的二维数组,然后输出列的二维数组,然后输出这个二维数组的元素值这个二维数组的元素值 形参声明为指向列数已知形参声明为指向列数已知的二维数组的行指针的二维数组的行指针2022-6-2322/42【例例11.311.3】输入一个输入一个3 3行行4 4列的二维数组,然后输出列的二维数组,然后输出这个二维数组的元素值这个二维数组的元素值 形参声明为指向二维数组形参声明为指向二维数组的列指针的列指针2022-6-2323/42【例例11.311.3】输入一个输入一个3 3行
7、行4 4列的二维数组,然后输出列的二维数组,然后输出这个二维数组的元素值这个二维数组的元素值 2022-6-2324/422022-6-2325/422022-6-2326/422022-6-2327/42交换字符数组中的字符串交换字符数组中的字符串物理排序物理排序2022-6-2328/42交换指针数组中的字符串指针交换指针数组中的字符串指针索引排序索引排序2022-6-2329/42在使用指针数组之前在使用指针数组之前必须对数组元素进行初始化必须对数组元素进行初始化2022-6-2330/42能这样输入字符串吗?能这样输入字符串吗?Why?2022-6-2331/42 Arguments
8、Arguments2022-6-2332/42如何输入命令行参数?如何输入命令行参数?echo.exe programming is fun2022-6-2333/42argv0echo.exeargv1argv2argv3programmingisfun指针数组指针数组字符串字符串The number of command line arguments is: 4The program name is: echo.exeThe other arguments are following: programming is fun2022-6-2334/42 全局变量和静态变量全局变量和静态变量
9、存放函数参数值、局部变量值等存放函数参数值、局部变量值等在执行函数调用时,系统在栈上为函数内的局部变量及形在执行函数调用时,系统在栈上为函数内的局部变量及形参分配内存,函数执行结束时,自动释放这些内存参分配内存,函数执行结束时,自动释放这些内存 在程序运行期间,用动态内存分配函数来申请的内存都是在程序运行期间,用动态内存分配函数来申请的内存都是从堆上分配的,动态内存的生存期由程序员自己来决定从堆上分配的,动态内存的生存期由程序员自己来决定 2022-6-2335/42Two primary methods of allocating memory: malloc(unsigned int si
10、ze); calloc(unsigned int num, unsigned int size);类型的指针可以指向任意类型的变类型的指针可以指向任意类型的变量,通常强转量,通常强转为其他类型为其他类型2022-6-2336/42Two primary methods of allocating memory:void* malloc(unsigned int size);void* calloc(unsigned int num, unsigned int size);向系统申请大小为向系统申请大小为的内存块的内存块把首地址返回,若申请不成功则返回把首地址返回,若申请不成功则返回向系统申请向
11、系统申请num个个size大小的内存块大小的内存块把首地址返回,若申请不成功则返回把首地址返回,若申请不成功则返回NULL2022-6-2337/42释放由释放由malloc()和和calloc()申请的内存块申请的内存块p是指向此块内存的指针是指向此块内存的指针free时系统标记此块内存为未占用,可被重新分配时系统标记此块内存为未占用,可被重新分配Method of deallocating memory:2022-6-2338/42确保指针使用前是非空指针确保指针使用前是非空指针释放向系统申请的存储空间释放向系统申请的存储空间2022-6-2339/42像使用一维数组一样像使用一维数组一样使用动态数组使用动态数组2022-6-2340/42确保指针使用前是确保指针使用前是非空指针非空指针释放向系统申请的释放向系统申请的存储空间存储空间2022-6-2341/42仍当作一维数组仍当作一维数组来使用来使用2022-6-2342/42Questions and answers
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。