1.指针是一个变量;声明一个指针 int *p;p是指针变量,类型是int *,64位系统下所有指针都占8个字节;放地址用的;
int a;
int *p = &a; 把a的地址放到p里边,p是指针变量,类型是int *;p指向a,p是a的地址
*p = 8;//*p表示找到地址为p的这块空间,相当于a=8;
地址是常量,指针是地址的变量;
&6不可以这样,因为6是常量,没有空间,也就没有地址;取地址只能针对变量;
2.指针通常和数组一块使用
#include <stdio.h>
int main (void){
int a[10];
int *p = a;//单独的数组名a相当于其第一个元素的地址,及&a[0];数组名是数组手元素的地址;
p = &a; //p是指向数组a的指针在这里,区分下;指针都是占8字节
*p = 8;//相当于把a[0]=8;
*(p+1) = 9;//&a[0] == ox?; %a[1] == ox? +4; *(p+1)就相当于a[1];
p+i就是每个元素的地址,因为是64位系统下整形,每个地址正好距离4个字节
0x7ffee3a41844
0x7ffee3a41848
0x7ffee3a4184c
0x7ffee3a41850
0x7ffee3a41854
0x7ffee3a41858
0x7ffee3a4185c
0x7ffee3a41860
0x7ffee3a41864
0x7ffee3a41868
}
指针变量加1,其结果相当于加1个其指向的字节数。
int *p = (int *)5;
p++;
p == 9;//因为int占4个字节(32位系统和64位系统),此时p还是指针
printf("%p",p);//不能用%d;指针类型
char *q = (char *)5;
q ++;
q == 6; //因为char占1个字节
const 修饰符:
char a = 'A';
const char *p = &a; //星前const(char const *p和前边一样)表示p可以改变,*p不可以改变;
char * const p;修饰的是p。p不可以改变
constchar * const p; *p和p都不可以改变