c语言=>指针

123 阅读2分钟

指针

指针的定义:

指针是一个变量,存放内存单元的地址(编号)

指针类型的意义:

1.指针类型决定了指针进行解引用操作的时候能够访问空间的大小(字节)

int* p,*P能够访问 4 个字节

char* p,*p能够访问 1 个字节

double* p,*p能够访问 8 个字节

2指针的类型决定了指针每走一步是多远(指针的步长)

int* p: p + 1 => 4

char* p : p + 1 => 1

double* p : p + 1 =>

#include<stdio.h>
int main()
{
	int a[] = {2,3};
	int* p = a;
	char* p1 = (char *)a;//(强制类型转化)将a的int类型强制转化为char
	printf("*p=%d\n", *p);
	printf("*(p+1)=%d\n", *(p + 1));
	printf("*p1=%d\n", *p1);
	printf("*(p1+1)=%d\n", *(p1+1));
	printf("%d\n", sizeof(p));//计算的是指针p的大小,
	      //只与计算机所使用的操作系统有关(32位小为4,64位下为8)
	return 0;
}

image.png

image.png

指针的运算

1.指针+-整数
2.指针-指针;(计算字符串的长度)得到中间元素得个数 大地址-小地址(必须是同一块空间。
3.指针关系运算
4.指针与数组

二级指针及三级四级指针

int mian()
{
	int a = 10;
	int* pa = &a;
	int** ppa = &pa;
	int*** pppa = &ppa;
	return 0;
}

*p=>一级指针

**ppa=>二级指针

数组指针

指向数组的指针-存放数组的地址-指针

{
	int arr[10] = { 1,2,3,4,5,6,7,8,9,0 };
	int(*p)[10] = &arr;
	//p先和*结合,说明p是一个指针变量,让后指针指向的是一个大小为
	//10个整形的数组
}

image.png

指针数组

1.定义:是数组,用来存放指针的。
2.

{
	int arr[10] = { 0 };//整形数组
	char ch[5] = { 0 };//字符数组
	int* parr[4];//存放整形指针的数组-指针数组
	//eg
	int arr1[] = { 1,2,3,4,5 };
	int arr2[] = { 2,4,5,6,7 };
	int* parr[] = { arr1,arr2 };
}

//int p=arr;
//p[i]==
(p+i)==*(arr+i)==arr[i];**

字符指针

char ch='w'; const char* p2='abcdef'; char* p=&ch; image.png