指针
在64位操作系统中 站8个字节 在32位操作系统中站4个字节
int* p=&num 在其中p为指针(变量) [别名] int* 为指针类型
**pp <----------->**&p<---------->*p <----------->*&num <--------->num
(二级指针) *&可消
变量类型 即为去掉变量名后剩下的部分。
指针数组:
它是一个数组,其中的元素都是指针。例如 int *arr[5] 表示一个有 5 个元素,每个元素都是指向整数的指针的数组。
例:
int* p_num={p_a,p_b,p_c};
数组指针:
它是一个指针,指向一个数组。比如 int (*ptr)[5] 就是一个指向包含 5 个整数的数组的指针。
指针可以进行 + - 一个整数a 表示偏移 a 个元素
num[a]<------------>*(&num[a])<----------------->*(num+a) 在其中的 * 为解引用符
&num[0]<--------------------------->num 首元素的地址
int (*p_num)[6]=&num;
sizeof(num)
===============》表示整个数组
&num
num[1] 第二行首元素地址
num 首元素地址
&num[0]+1<------------------------>num[1]
num+1 移动到下一个数组
示例:
#include <stdio.h>
int main()
{
int score[3][3]={{1,2,3},{4,5,6},{7,8,9}};
int (*p_score)[3][3]=&score;
printf("score[3][2]=%d\n",*(score[2]+1));
printf("score[3][2]=%d\n",*(*(score+2)+1));
printf("score[3][2]=%d\n",score[2][1]);
printf("score[2][3]=%d\n",*(&score[1][0]+2));
printf("score[2][3]=%d\n",*(*(&score[0]+1)+2));
printf("score[2][3]=%d\n",*(*(&score[1])+2));
return 0;
}
运行结果:
score[3][2]=8
score[3][2]=8
score[3][2]=8
score[2][3]=6
score[2][3]=6
score[2][3]=6
小技巧:在某些情况下 可以将&看作一次积分 将*看做一次求导
大小端:
例:0x11223344
大端(高位) 44 33 22 11
小端 (高位) 11 22 33 44 (一般为小端)