指针
指针:变量存储在内存中某一个地址标识的存储空间中,在程序中,通过使用指针,获取变量地址。因此,在程序中输出指针的值为unsigned的整数。
指针变量:用来存放指针的变量。
&取地址运算符。
#include <stdio.h>
int main() {
int a = 12;
int *b = &a;
printf("%d\n",a);
printf("%d\n",&a);
printf("%d\n",b);
return 0;
}
输出:
12
6356744
6356744
指针与数组
数组名可以作为数组的首地址,比如数组int a[10],则a的值为a[0]的地址,a+2的值为a[2]的地址。
#include <stdio.h>
int main() {
int a[10] = {1,2,3,4,5};
printf("%d\n",sizeof(int));
printf("%d\n",a);
printf("%d\n",a+2);
printf("%d\n",*a);
printf("%d\n",*a+2);
return 0;
}
输出:
4
6356712
6356720
1
3
由于int是占四个字节存储空间,a[0]的存放地址是6356712,a[2]与之相隔两个int型数据,故地址为6356712+4*2 = 6536720
指针作为函数参数
通过指针将变量地址传入函数,可以直接修改变量的值。
常见的例子:
#include <stdio.h>
void swap(int a,int b){//此方式没能转换a与b的值
int temp = a;
a = b;
b = temp;
}
void p_swap(int *a,int *b){//此方式能够转换a与b的值
int x;
int *temp = &x;//声明指针时最好初始化
*temp = *a;
*a = *b;
*b = *temp;
free(temp);
}
int main() {
int a = 2,b = 5;
printf("before\t\ta = %d,b = %d\n",a,b);
swap(a,b);
printf("usual way\ta = %d,b = %d\n",a,b);
a = 2;
b = 5;
printf("before\t\ta = %d,b = %d\n",a,b);
p_swap(&a,&b);
printf("point way\ta = %d,b = %d",a,b);
return 0;
}
输出:
before a = 2,b = 5
usual way a = 2,b = 5
before a = 2,b = 5
point way a = 5,b = 2