#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];
}
数组作为实参传给函数的形参指针,怎么理解?
data[0]= data1[0]; data[1]= data1[1];
总感觉应该*data[0]= data1[0]; *data[1]= data1[1];
*data[0]= data1[0]; *data[1]= data1[1];
在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的不行?
不过这样的写法肯定不如更好的写法: data[0]= data1[0];data[1]= data1[1];试想,你data1都可以用 data1[0]这样的处理获取到 第一个元素的值,为什么 data的不行?
data[0] = * (data + 0); data[1] = * (data + 1);
data[0] = * (data + 0);
data[1] = * (data + 1);
函数数里的*data只是说明参数的类型是指针,并不是说传输的参数要加上*
数组的名字就是可以按指针来对待的。