1.指针定义
普通指针: int val=0;int* p = &val;
指针数组 const char* arr[]={"abc","hello","world"};
数组指针 int (*p) [3]=&arr; p+1能力 偏移量12个字节(int[3])
//使用:
//int arr[3];
// int* pointer=arr; pointer+1 4字节
// int (*p) [3] = &arr; //arr整体
arr &arr[0] &arr--->指向数组首元素
2.普通数组使用 int val=0; int* p=&val; *p=1;
数组指针: *((int*)(p+1)-1)访问值?(3)
【1】【2】【3】
* p+1
3.判断大小端问题
数据存储模式分 小端存储模式 和 大端存储模式 两种
vs 采用 小端存储模式
小端存储模式:低低(滴滴) 低位数据 存储低地址位置 顺序存储
大端存储模式:高低 高位数据 存储低地址位置 非顺序存储
指针验证法:
int val=0x12345678;
char* p=(char*)&val;
if(*p==0x78){小端};
else{大端};
//其中0x78是低地址,0x12是高地址。因为权为16,权所在的位次高。
4.指针+1能力 所指数据类型 *p; p+1
指针-1 表示(+/-)指针所指类型(的字节数)
指针-指针 【】【】【】【】【】 q-p=5
p q
5.const和指针结合
保持左右指针类型一致
6.二分法查找指定数据
#include<stdio.h>
#include<string.h>
#include <assert.h>
int BinarySearch(int *arr,int len,int val) {
//1.参数检验
assert(arr !=NULL && len>=0);//断言
//arr==NULL 断言失败 后序代码不会被执行
//2.核心功能设计
int left = 0, right = len - 1;
int mid = (left + right) / 2;
//(left+right)>>1
//下标越界 (right-left)/2+left
// ((right-left)>>1)+left 考虑优先级
while (left<=right) {
mid = (left + right) / 2;
if (arr[mid] == val) return mid;
else if (arr[mid] > val) right = mid - 1;
else if (arr[mid] < val) left = mid + 1;
}
return -1;
}
int main() {
int arr[] = { 1,2,3,4,5,6 };
int len = sizeof(arr) / sizeof(arr[0]);
int index = BinarySearch(arr, len, 5);
printf("%d", index);
return 0;
}