指针与数组名的区别

xwbar的头像
2026-01-23 02:58:00
/
中国勇夺世界杯

chrislee

数组和指针的关系

函数的参数中 数组类型参数 int a[]本质是指针 可以直接换成 int *a;

可以用数组的运算符[]进行运算,而且可以通过a[0]就直接修改了外面的数组元素;

size of(a) == sizeof(int *) 所以函数内部没法用sizeof得到数组的长度 只能传一个len;

// 一个整型数组的指针,长度为 len, 得到数组中的最小值和最大值 ———— 从外部传入两个指针,从而将所求的两个结果保存带出来,得到多个返回值。

void minMax(int a[], int len, int *min, int *max) {

int i;

*min = *max = a[0]; //假定最大值 最小值相等 为a[0]

for(i= 1; i < len, i++) {

if( a[i] < *min) {

*min = a[i];

}

if(a[i] > *max) {

*max = a[i];

}

}

}

int a[] = {1, 2, 3, 4, 5, 7, 8, 9, 15, 18, 25, 33};

int min, max;

minMax(a, sizeof(a)/ sizeof(a[0]), &min , &max );

printf( "min = %d, max = %d \n", min, max);

数组变量是特殊的指针,数组变量本身表达地址,int a[10]; int *p =a;

数组变量无需用取址符& ;

数组的元素表达的是变量,需要用&取地址,如 m = &a[0];

[]运算符可以对数组做,也可以对指针做 p[0] == a[0];

*运算符可以对指针做,也可以对数组做 *a = 25, *a可以得到或者修改数组首个元素的值;

实际上数组是 const 的指针,所以不能被赋值。 如果 int a[] = {1,2,5,7}; int b[],由于 int b[]实质上等价于 <===> int const *b; b 是一个常数,不能被改变,初始化出来代表这个数组就不能再改变。 b = a; (错误) 数组变量之间是不可以这样互相赋值的。 而 int *q = a; 这样是可以的。

米袋里面全是米虫,不要暴晒,教你5个“土方法”,1年都不生虫子
2026年国际足联世界杯小组赛抽签:德国将在加拿大、墨西哥和美国面对谁?