=指针的概念=====
int a = 10;
int *p = &a;
int 指针类型 保存的数据对应类型的内存地址
- 指针变量
p 名字
关于指针的两种说法
1.定义一个指针,让它指向a的地址
2.定义一个指针变量,用保存a的地址(推荐)
指针变量大小:
只跟操作系统的位数有关,跟保存的地址类型没有关系
32位系统指针变量占 4个字节
64位系统指针变量占 8个字节
指针的简单运算==========
1.解引用 * 地址–》值
要跟定义指针变量时*区分
除此之外,*和指针变量一起使用,*作用就是解引用
int a = 10;
int * p = &a;
*p = 20;
printf(“*p %d\n”,*p);//解引用
printf(“a %d\n”,a);
2.取地址 & (变量 --》地址)
通过变量获取变量所在内存的地址
int a = 10;
*(&a) a
scanf(“%d”,&a)
3.指针的加减运算
int a = 10;
int * p = &a;
char b = ‘Q’;
char * q = &b;
p 0x7fffc89c7834 q 0x7fffc89c7833
p+1 0x7fffc89c7838 q+1 0x7fffc89c7834
p+1 和p 差值 4
q+1 和q 差值 1
p++ p+1 有区别的: p++ p本身改变了
指针的加减运算跟数学上有区别的:
差值只跟类型有关系
int * 4
char * 1
补充:
通过指针的加减运算访问数组数据
int buf[5] ={12,1,3,55,47};
buf[0] 12
*(buf+0) 数组的名字也是数组首元素(buf[0])的地址 *(&buf[0]) &buf[0] 等价于 buf
*(buf+1) buf[1]