int a = 1;
int *pa = &a;
printf("a所占的内存大小:%lu\n",sizeof(a));
printf("pa所占的内存大小:%lu\n",sizeof(pa));
输出结果:a所占的内存大小:4
pa所占的内存大小:8
(在64位系统下,一个指针变量占据8个字节)
输出a的两种方式:
printf("a = %d\n",a);
printf("a = %d\n",*pa); //这里*pa(右值)表示取值
char c = 'c';
char *pb = &c;
printf("c所占的内存大小:%lu\n",sizeof(c));
printf("pb所占的内存大小:%lu\n",sizeof(pb));
输出结果:c所占的内存大小:1
pb所占的内存大小:8
int a = 1;
int *pa = &a;
int *paa = &a;
*pa = 2; //这里*pa(左值)表示指针指向的那片地址空间
printf("*pa = %d\n",*pa);
printf("**pa = %d\n",*paa);
输出结果:
*pa = 2
**pa = 2
int a = 1;
int *pa = &a;
printf("a = %d\n",a);
printf("所记录的值:%x\n",pa);
printf("所记录的值:%x\n",pa+2);
输出结果:
a = 1
所记录的值:5fbff82c
所记录的值:5fbff834
int a = 1;
int *pa = &a;
int **paa = &pa;
printf("%d\n",**paa);
printf("%lu\n",sizeof(paa));
输出结果:
1
8
// const的位置
int b = 5;
const int *pa = &b;
b = 6; // 不可以通过指针改变b的值
printf("%d\n",*pa);
int *const pb = &b;
*pb = 7;
printf("%d\n",*pb);
b = 4;
printf("%d\n",b);
int a = 3;
int *pa = &a;
printf("*pa = %d\n",*pa);
void *pb = &a;
int *pbb = (int *)pb; //(指针类型转换)
printf("*pbb = %d\n",*pbb);
int array[3] = {1,2,3};
printf("%x\n",array+1);
printf("%x\n",&array+1);
int array[3] = {1,2,3};
printf("%x\n",array);
printf("%x\n",&array);
printf("%x\n",&array[0]);
printf("--->%d\n",*array);
printf("--->%d\n",array[0]);
printf("--->%d\n",*(array+0));
printf("--->%d\n",*(0+array));
printf("--->%d\n",0[array]);
printf("%d\n",array[1]);
printf("%d\n",*(array+1));
int array[10] = {0};
printf("%d\n",array+1);
printf("%d\n",&array+1);
int array[3] = {111,222,333};
char *pa = array;
int *paa = (int *)pa; //(指针数据类型转换) 可将111换成150检验
printf("%d\n",*paa);
int array2[2][3] = {{1,2,3},{4,5,6}};
int (*pa)[2] = &array2;
int result = *(*(pa+0)+3);
printf("result:%d\n",result);