- 指针变量
- 运算符&
- 作为参数的指针
- 访问地址上的变量
- 指针与数组
- 脑图总结
- 示例代码
- 变量的值是内存的地址
- 是具有实际值的变量的地址
- 与普通变量的不同:普通变量是实际的值
//这是指针变量 int *p //这是普通变量 int x运算符&
- 获取变量地址,它的操作数必须是变量
//通过&获取i在内存中的地址 f(&i);作为参数的指针
void f(int *p)
- 在函数里面可以通过这个指针访问外面的这个i
//在被调用时得到某个变量的地址 int i = 0; f(&i);访问地址上的变量
- *是一个单目运算符,用来访问指针上的值所表示的地址上的变量
- 可以做右值也可以做左值
//对地址所表示的变量修改
*p =16;
//访问地址所表示的变量
printf("*p=%dn",*p);
//可以做右值也可以做左值
int k = *p;
*p = k+1;
指针与数组
- 数组变量是特殊的指针,数组本身表达地址
- 无需用&取地址
int a[10]; int*p=1;
- 但是数组的单元表达是变量,需要用&取地址
a == &a[0]
- []运算符可以对数组做,也可以对指针做
p[0] <==> a[0]
- 数组变量是const的指针,所以不能被赋值
Pointer variable
#includevoid f(int *p); void g(int k); int main(void){ int i =6; printf("&i=%pn",&i); f(&i); g(i); return 0; } void f(int *p){ printf(" p=%pn",p); printf("*p=%dn",*p); *p =16; } void g(int k){ printf("k=%dn",k); }
Address character&
#includeint main(void) { int i=0; int p; int a[10]; printf("%pn",&a); printf("%pn",a); printf("%pn",&a[0]); printf("%pn",&a[1]); printf("n"); p= (int)&i; printf("%pn",&i); printf("%pn",&p); printf("0x%xn",&p); printf("%pn",&i); printf("%lun",sizeof(int)); printf("%lun",sizeof(&i)); return 0; }
minmax
#includevoid minmax(int a[], int len, int *min, int *max); int main(void) { int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 12, 13, 14, 16, 17, 21, 55}; int min, max; printf("main sizeOf(a)=%lun", sizeof(a)); minmax(a, sizeof(a) / sizeof(a[0]), &min, &max); printf("min=%d,max=%dn", min, max); int *p = &min; printf("*p=%dn", *p); printf("p[0]=%dn", p[0]); printf("*a=%dn", *a); return 0; } void minmax(int a[], int len, int *min, int *max) { int i; printf("minmax sizeOf(a)=%lun", sizeof(a)); *min = *max = a[0]; for (i = 1; i < len; i++) { if (a[i] < *min) { *min = a[i]; } if (a[i] > *max) { *max = a[i]; } } }



