• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

数组作为实参传给函数的形参指针,怎么理解?

huihui163 2020-11-09 浏览量:604
#include <stdio.h>
 int data[2];
void swapp(int *data)
{
	int data1[2]={12};
	data[0]=	data1[0];
	data[1]=	data1[1];
	//for(i = 0;i < 2;i++data++)
	//{    
      //  data1[i] = *data;
	//}
}
	
	
int main()
{
  /@@* 带有 5 个元素的整型数组 */
   double balance[5] = {1000.0 2.0 3.4 17.0 50.0};
   double *p;
   int i;
  
   
   swapp(data);
   /@@* 输出数组中每个元素的值 */
   printf( "使用指针的数组值\n");
   printf( "使用 p[i] 作为地址的数组值\n");

   for ( i = 0; i < 2; i++ )
   {
       printf("data[%d]: %d\n"  i data[i] );
   }
 
   return 0;

}


数组作为实参传给函数的形参指针,怎么理解?​

data[0]=	data1[0];
data[1]=	data1[1];
总感觉应该
*data[0]=	data1[0];
*data[1]=	data1[1];

0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 在C语言中,数组名A其实等效于&A[0],即它本身就是一个指针量。

    所以 A作为实参传递的时候,实际上传递的是 &A[0] 的值。

    再有对数组元素的访问 时  A[n] 等效于 *(&A[0] + n),这里的n是在数组定义范围内的元素序数,比如定义A[2]则n最大为1。

    所以你感觉那个写法反而是错误的,相对应的正确写法是

    *( &data[0] )= data1[0];

    *( &data[1] )= data1[1];

    不过这样的写法肯定不如更好的写法:
    data[0]=	data1[0];
    data[1]= data1[1];
    试想,你data1都可以用 data1[0]这样的处理获取到 第一个元素的值,为什么 data的不行?
    
    


    • 发布于 2020-11-10
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:6
  • 下面的表达式是取数组内容地址的内容,所以如果要用指针就要用*data和*data++
    • 发布于2020-11-09
    • 举报
    • 评论 0
    • 0
    • 0

  • 数组名就相当于一个指针,这个指针指向数组存储位置的首地址,数组是连续存储的,所以可以用指针递增的方式使用数组成员。
    • 发布于2020-11-09
    • 举报
    • 评论 0
    • 0
    • 0

  • data[0] = * (data + 0);
    data[1] = * (data + 1);
    
    • 发布于2020-11-10
    • 举报
    • 评论 0
    • 0
    • 0

  • 函数数里的*data只是说明参数的类型是指针,并不是说传输的参数要加上*

    数组的名字就是可以按指针来对待的。

    • 发布于2020-11-10
    • 举报
    • 评论 0
    • 0
    • 0

  • 这种写法只是比较丑,但语法上面是没有问题的
    • 发布于2020-11-19
    • 举报
    • 评论 0
    • 0
    • 0

  • 这种就是用的数组的指针作为参数直接传递,只要主要数组不越界使用即可
    • 发布于2020-11-19
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

数组作为实参传给函数的形参指针,怎么理解?