指针与数组名的区别
指针:也是一个变量,存储的数据是地址。
数组名:代表的是该数组最开始的一个元素的地址。
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; 这样是可以的。