本帖最后由 chunhuayun 于 2015-9-27 06:40 编辑
10.使用指针交换两个变量的值 - #include <stdio.h>
- //不使用指针的交换函数
- void swap(int a, int b){
- int temp = a;
- a = b;
- b = temp;
- }
- //使用指针的交换函数
- void swapByPointer(int * a, int * b){
- int temp = *a;
- *a = *b;
- *b = temp;
- }
-
- int main(int argc, const char * argv[])
- {
- int A = 10;
- int B = 123;
- swap(A,B);
- printf("After swap A = %d,B = %d\n", A,B);
- swapByPointer(&A,&B);
- printf("After swap by pointer A = %d,B =%d\n", A, B);
-
- return 0;
复制代码
打印结果:
After swap A = 10,B = 123
After swap by pointer A = 123,B = 10
分析:因为不用指针的值传递只是把原变量的值拷贝了一份给函数,不会影响到原值。用指针做参数传递,是把变量的地址传递到函数,这样会改变原值。指针做参数传递可以实现函数返回多个值。
11.指针的常见应用场景 A.在函数中间接访问调用者中的变量
B.让函数返回多个值
12.二级指针 如果一个指针变量存放的又是另一个指针变量的地址,则称这个指针变量为指向指针的指针变量,也称为"多级指针" 例如:
- int a = 10;
- int *p = &a;
- int **p2 = &p;
-
- printf("a = %d", **p2);
复制代码
打印结果
a = 10
例外我试过,其实int *p2 = p跟int **p2 = &p的效果是一样的 - int a = 10;
- int *p = &a;
- int **p2 = &p;
- int *p3 = p;
- printf("*p2 = %d\n", *p2);
- printf("*p3 = %d", p3);
复制代码
打印结果:
p = 10
*p2 = 1606416668
*p3 = 1606416668
12.指针为什么要区分类型?
在同一个编译器下,所有指针变量占用的字节数都一样 - int a = 10;
- char ch = 'a';
- float b = 123.3f;
- double c = 123.2;
-
- int *pa =&a;
- char *pch = &ch;
- float *pb = &b;
- double *pc = &c;
-
- printf("int pointer size = %ld\n", sizeof(pa));
- printf("char pointer size = %ld\n", sizeof(pch));
- printf("float pointer size = %ld\n", sizeof(pb));
- printf("double pointer size = %ld\n", sizeof(pc));
复制代码
例如 打印结果: int pointer size = 8
char pointer size = 8
float pointer size = 8
double pointer size = 8那么为什么还要区分类型呢?
因为如果存储的是一个int类型的变量,值266,占用四个字节,取出来的时候是按照char型取的,而char型在内存中只占用一个字节,那么此时只会取一个字节,这样就会有预料不到的后果。
如下图:(盗用讲课老师的)
|