指针与数组名的区别
指针:也是一个变量,存储的数据是地址。
数组名:代表的是该数组最开始的一个元素的地址。
int a[10]; int *p; p = &a[0] // 可以写成 p = a;
- 对数组元素 a[i]的引用也可以写成*(a+i)这种形式。
- 赋值语句 p=&a[0] 也可以写成下列形式: p=a。
- p 是个指针,p[i]与*(p+i)是等价的。
区别:指针是一个变量,可以进行数值运算。数组名不是变量,不可以进行数值运算。
Jiangang
指针与数组名的区别
指针:也是一个变量,存储的数据是地址。
数组名:代表的是该数组最开始的一个元素的地址。
int a[10]; int *p; p = &a[0] // 可以写成 p = a;
区别:指针是一个变量,可以进行数值运算。数组名不是变量,不可以进行数值运算。
HBR1
指针与数组的区别
char *str="Hello"; char arrgs[]="Hello";
字符数组:
char *p=(char*)&arrgs == char *p=arrgs ; char *p=(char*)(&(arrgs[0])) == &arrgs == arrgs;
字符串指针:
char *p=(char*)&str != str; str==str[0] =='H'
得出结论字符数组的 首地址可以用 arrgs ,&arrgs,来表示并且它们相等,
但是指针&str和str是不同的,当遇到字符串指针时候要注意处理方式;
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);
[]运算符可以对数组做,也可以对指针做 p[0] == a[0];*运算符可以对指针做,也可以对数组做 *a = 25, *a可以得到或者修改数组首个元素的值;int a[] = {1,2,5,7}; int b[],由于 int b[]实质上等价于 <===> int const *b; b 是一个常数,不能被改变,初始化出来代表这个数组就不能再改变。 b = a; (错误) 数组变量之间是不可以这样互相赋值的。 而 int *q = a; 这样是可以的。