目录
一,指针本质分析
定义:指针就是内存地址;指针变量就是用来存放内存地址的变量。
分析:只要是变量就有地址和占用内存,所以指针变量也有地址,并且占用内存。
注意:指针是不占用内存地址的,其本质是地址,地址不占用空间。指针变量才占用内存空间。
指针变量内存所占空间大小sizeof(type*)或sizeof(p)取决于计算机的位数:
32位数占用4字节;
64位数占用8字节;
128位数占用16字节;
。。。
int i = 1;
int* p = &i;
p //指针变量,是i的地址。
*p //去内存地址中保存的值。
&p //指针变量占用的地址,是p的地址。
&和*是一对相反操作符,可以相互抵消。*&p=p
%p 打印地址。
1,传值调用和传址调用:
只有通过地址,才可以在函数内部修改函数外部的变量:
#include <stdio.h>
int swap(int* a, int* b)
{
int c = *a;
*a = *b;
*b = c;
}
int main()
{
swap(&aa, &bb);
printf("aa = %d, bb = %d\n", aa, bb);
return 0;
}
通过指针进行传址调用,交换了aa和bb的值。
2,常量与指针:
const int* p ; //p可变,p指向的内容不能变。
int const* p ; //p可变,p指向的内容不能变。
int* const p; //p不可变,p指向的内容能变。
const int* const p ; //p和p指向的内容均不能变。
口诀:左数又指(数:地址保存的数据;指:指向的地址)
const p :常量指针