一、指针基础定义与使用
指针是一种用来存储内存地址的变量。 类型名 * 指针变量名
基础使用方法:
1.声明指针变量
#include<stdio.h>
int*p;//声明一个int类型的指针变量
2.取地址操作符&
#include<stdio.h>
int val=20;
int *p;
p = & val;//将val的地址赋给p
3.解引用操作符*
#include<stdio.h>
int val=20;
int *p;
p=&val;
int n=*p;//n现在的值为20,*p表示指针p所指向的变量的值
4.指针的算术运算
#include<stdio.h>
int arr[]={10,20,30,40};
int *p=arr;//指针指向数组第一个元素
p++;//指针现在指向arr[1]
int val=*p;
5.指针和数组
#include<stdio.h>
int arr[]={10,20,30,40};
int *p=arr;
for(int i=0;i<4;i++)
{
printf("%d",*p);
p++;
}
6.指针和字符串
#include<stdio.h>
char *s="Hello";
printf("%c",*s);
7.函数指针
int (*funcPtr)(int, int);//声明函数指针
int add(int a, int b) {
return a + b;
}
int (*funcPtr)(int, int) = add; // 将add函数的地址赋给funcPtr
int result = (*funcPtr)(3, 5); // 调用通过函数指针调用add函数
二、指针与const结合
1.指向常量的指针:
const int val=10;
const int *p;//声明一个指向常量int的指针(限定*p)
p=&val;
2.常量指针:
int val=10;
int *const p=&val;//声明一个指向int的常量指针(限定p)
3.指向常量的常量指针
const int val=10;
const int *const p=&val;
三、指针+1和指针-1能力
1.指针+1能力
取决于指针所指的数据类型,当对指针进行+1操作时,指针的值会增加一个存储单元的大小。指针+1的能力对普通变量,即增加的字节数为指针所指向类型的大小。指针+1的能力对数组时,指针+1将导致指针指向数组中下一个元素的地址
2.指针-1能力
如果你有一个指针变量,比如int *ptr
,那么ptr - 1
表示将指针向低地址方向偏移一个单位,即指向前一个内存单元。这通常用于指针算术中移动指针位置。如果单独出现在表达式中,比如int *ptr = someArray - 1
,那么-1
实际上是一个补充,指示指针指向数组的前一个位置,而不是数组的第一个位置。
四、判断大小端问题
指针验证法: 低地址 高地址
int vai=0x12345678; 0x78 0x56 0x34 0x12
char *p=(char*)&val; 0x12 0x34 0x56 0x78
if(*p==0x78){小端}
else{大端}