C语言指针详解-上
前言
指针是C语言中一个绕不开的点,也是解题必备的工具,本文将围绕指针这几点进行详解:
1.指针的基本概念
1.1指针是什么
1.2指针的声明与初始化
- 在C语言中,声明指针主要分两步:
如:
int* p1,p2;
*
表明p1
是个变量,int
表明p1
可以存储指向整型变量的地址
对于p2
,*
和它没有关系,所以p2
是个整型变量
- 而在声明指针时,给指针一个具体的地址或NULL就是初始化
如:
int x = 10;
int *p = &x;
这里创建了变量x
,并使用取地址符(&
)将x
的地址存入p
1.3取地址符&
和解引用符*
2.指针的类型
指针的类型大多取决它所指向的数据类型:
3.指针运算
指针运算主要包括:
- 指针的解引用
- 指针 + 整数、指针 - 整数
- 指针和指针的比较
- 指针-指针
3.1指针的解引用
指针类型决定了其在解引用时访问几个字节,以及访问的方式:
int n1 = 0x66666666;
int n2 = 0x66666666;
int n3 = 0x66666666;
int* p1 = &n1;
*p1 = 0;
char* p2 = (char*) & n2;
*p2 = 0;
float* p3 = (float*) & n3;
*p3 = 0;
printf("int:%x\nchar:%x\nfloat:%x\n", n1,n2,n3);
3.2指针 + 整数、指针 - 整数
指针加整数n,其储存的地址加(n* 所指类型的大小),单位字节
可简单验证:
char ch;
int a;
int arr[4] = { 0 };
char* pc = &ch;
int* pa = &a;
int(*parr)[4] = &arr;
printf("pc=%p\npa=%p\nparr=%p\n", pc, pa, parr);
printf("pc=%p\npa=%p\nparr=%p\n", pc+1, pa+1, parr-1);
3.3指针和指针的比较
在两个指针指向同一块空间的不同位置,我们可以进行指针间的比较:
int arr[10]={1,2,3,4,5,6,7,8,9,10};
int*p1=arr;
int*p2=&arr[9];
while(p1<=p2)
{
printf("%d ",*p1);
p1++;
}
3.3指针-指针
相同类型指针可相减,得到相距的元素个数
下面代码使用指针-指针得到字符串长度:
char ch[10] = "Hahaha";
char* pc1 = ch;
char* pc2 = ch;
while (*pc2 != '\0')pc2++;
printf("%d\n", pc2 - pc1);
希望本篇文章对你有所帮助!
当然,本人仅仅是个C语言初学者,如有任何意见,欢迎各位提出!
C语言指针详解-下