C语言指针理解---一维数组作函数参数的用法

简介: C语言指针理解---一维数组作函数参数的用法

一维数组做函数参数的用法:

  1. 当一维数组做函数参数的时候,会退化为指针
  2. 一维数组做函数参数的时候,c/c++编译器会做优化

                  int a[10]  ----->int a[] ---->int *a

                  所以数组作函数参数的时候只能传指针

   3.函数调用的时候,把数组首地址和有效数据长度传给被调用函数才是最正确的做法

 

//在函数调用哪个的时候 实参的值机械的传给形参(c int数组场景)

关于形参的理解:

        写在函数上形参变量,还是写在函数里面的变量,

        从CC++编译的角度来讲,是没有任何区别的(分配4字节内存);

        只不过是 写在函数上形参变量 ,具有对外的属性而已

 

下面给出程序具体实例

1. #include "stdlib.h"
2. #include "string.h"
3. #include "stdio.h"
4. 
5. //当数组当做函数参数的话的时候会退化为指针 
6. int printfArray(int a[]) //这里形参a[10]跟a[]效果一样
7. {
8.  int i = 0;
9.  int num = 0;
10. 
11.   num = sizeof(a) / sizeof(*a);  //这里num值为1
12.   printf("num=%d.\n", num);
13.   for (i = 0; i < 10; i++)
14.   {
15.     printf("%d ", a[i]);
16.   }
17.   printf("\n");
18.   return 0;
19. }
20. 
21. //int a[10]  -=-->int a[] ---->int *a
22. //数组做函数形参的时候,如果在形参中定义int a[10]语句,
23. //c/c++编译器 会做优化,技术推演如下
24. //int a[10]  -=-->int a[] ---->int *a
25. //总结:函数调用的时候,把数组首地址和有效数据长度传给被调用函数才是最正确的做法
26. //在函数调用哪个的时候 实参的值机械的传给形参(c int数组场景)
27. 
28. //关于形参:
29. /*
30.     写在函数上形参变量,还是写在函数里面的变量,
31.     从CC++编译的角度来讲,是没有任何区别的(分配4字节内存);
32.     只不过是 写在函数上形参变量 ,具有对外的属性而已
33. */
34. 
35. 
36. int printfArray04(int *a, int num)
37. {
38.   int i = 0;
39.   for (i = 0; i < num; i++)
40.   {
41.     printf("%d ", a[i]);
42.   }
43.   printf("\n");
44.   return 0;
45. 
46. }
47. 
48. 
49. int sortArray(int a[])
50. {
51.   int i = 0, j = 0;
52.   int tmp;
53.   for (i = 0; i < 10; i++) //外层循环
54.   {
55.     for (j = i + 1; j < 10; j++) //内层循环
56.     {
57.       if (a[i] > a[j])
58.       {
59.         tmp = a[i];
60.         a[i] = a[j];
61.         a[j] = tmp;
62.       }
63.     }
64.   }
65.   return 0;
66. }
67. void main()
68. {
69.   //定义数组 打印数组 数组排序
70.   int i = 0, j = 0;
71.   int num2;
72.   int a[10] = { 1,3,4,5,65,76,7,34,4,32 };
73.   int tmp;
74. 
75.   num2 = sizeof(a) / sizeof(*a); //这里num2值为10
76.   printf("num2:%d \n", num2);
77. 
78.   printf("排序之前\n ");
79.   printfArray04(a, 10);
80.   sortArray(a);
81. 
82.   printf("排序之后\n ");
83.   printfArray(a);
84. 
85.   system("pause");
86. }
相关文章
|
6月前
|
IDE 编译器 开发工具
【C语言】全面系统讲解 `#pragma` 指令:从基本用法到高级应用
在本文中,我们系统地讲解了常见的 `#pragma` 指令,包括其基本用法、编译器支持情况、示例代码以及与传统方法的对比。`#pragma` 指令是一个强大的工具,可以帮助开发者精细控制编译器的行为,优化代码性能,避免错误,并确保跨平台兼容性。然而,使用这些指令时需要特别注意编译器的支持情况,因为并非所有的 `#pragma` 指令都能在所有编译器中得到支持。
509 41
【C语言】全面系统讲解 `#pragma` 指令:从基本用法到高级应用
|
4月前
|
存储 人工智能 Java
一文轻松拿捏C语言的指针的基础使用
本文介绍了C语言中的指针概念,包括直接访问和间接访问内存的方式、指针变量的定义与使用、取址运算符`&`和取值运算符`*`的应用,帮助读者深入理解指针这一C语言的核心概念。君志所向,一往无前!
92 0
|
6月前
|
存储 NoSQL 编译器
【C语言】指针的神秘探险:从入门到精通的奇幻之旅 !
指针是一个变量,它存储另一个变量的内存地址。换句话说,指针“指向”存储在内存中的某个数据。
242 7
【C语言】指针的神秘探险:从入门到精通的奇幻之旅 !
|
6月前
|
存储 编译器 C语言
【C语言】指针大小知多少 ?一场探寻C语言深处的冒险 !
在C语言中,指针的大小(即指针变量占用的内存大小)是由计算机的体系结构(例如32位还是64位)和编译器决定的。
810 9
|
6月前
|
安全 程序员 C语言
【C语言】指针的爱恨纠葛:常量指针vs指向常量的指针
在C语言中,“常量指针”和“指向常量的指针”是两个重要的指针概念。它们在控制指针的行为和数据的可修改性方面发挥着关键作用。理解这两个概念有助于编写更安全、有效的代码。本文将深入探讨这两个概念,包括定义、语法、实际应用、复杂示例、最佳实践以及常见问题。
166 7
|
7月前
|
存储 程序员 编译器
C 语言数组与指针的深度剖析与应用
在C语言中,数组与指针是核心概念,二者既独立又紧密相连。数组是在连续内存中存储相同类型数据的结构,而指针则存储内存地址,二者结合可在数据处理、函数传参等方面发挥巨大作用。掌握它们的特性和关系,对于优化程序性能、灵活处理数据结构至关重要。
|
存储 C语言
C 语言函数完全指南:创建、调用、参数传递、返回值解析
函数是一段代码块,只有在被调用时才会运行。 您可以将数据(称为参数)传递给函数。 函数用于执行某些操作,它们对于重用代码很重要:定义一次代码,并多次使用。
296 3
|
8月前
|
C语言
C语言函数返回值详解
本文详细解析了C语言中函数返回值的概念与应用。从函数的基本定义入手,深入探讨了不同类型返回值的作用及意义,并提供了实用的编程示例,帮助读者更好地理解和使用函数返回值。通过本文,你将掌握如何有效利用返回值优化代码结构与功能实现。
|
C语言
C语言---函数---知识点总结(三)------函数的返回值类型
C语言---函数---知识点总结(三)------函数的返回值类型
|
12月前
|
存储 C语言
C语言的函数返回值和指针
C|函数返回值(区分各类值)和指针(区分各类存储空间)的细节