程序中的变量只是一段存储空间的别名,那么是不是必须通过这个别名才能使用这段存储空间?
下面的程序输出什么?
运行结果如下:
i的值发生了改变,但是在程序中,我们没有直接修改i的值,这就是因为指针的操作,通过指针我们改变了i的值。
*号的意义:
小贴士:
指针的使用示例:
1 #include <stdio.h> 2 3 int main() 4 { 5 int i = 0; 6 int* pI; 7 char* pC; 8 float* pF; 9 10 pI = &i; 11 12 *pI = 10; 13 14 printf("%p, %p, %d ", pI, &i, i); 15 printf("%d, %d, %p ", sizeof(int*), sizeof(pI), &pI); 16 printf("%d, %d, %p ", sizeof(char*), sizeof(pC), &pC); 17 printf("%d, %d, %p ", sizeof(float*), sizeof(pF), &pF); 18 19 return 0; 20 }
运行结果如下:
传值调用与传址调用:
利用指针交换变量:
1 #include <stdio.h> 2 3 int swap(int* a, int* b) 4 { 5 int c = *a; 6 7 *a = *b; 8 9 *b = c; 10 } 11 12 int main() 13 { 14 int aa = 1; 15 int bb = 2; 16 17 printf("aa = %d, bb = %d ", aa, bb); 18 19 swap(&aa, &bb); 20 21 printf("aa = %d, bb = %d ", aa, bb); 22 23 return 0; 24 }
运行结果如下:
常量与指针:
程序示例:
#include <stdio.h> int main() { int i = 0; const int* p1 = &i; int const* p2 = &i; int* const p3 = &i; const int* const p4 = &i; *p1 = 1; // compile error p1 = NULL; // ok *p2 = 2; // compile error p2 = NULL; // ok *p3 = 3; // ok p3 = NULL; // compile error *p4 = 4; // compile error p4 = NULL; // compile error return 0; }
编译器报错结果如下:
小结: