栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

指针(c语言)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

指针(c语言)

1.指针基础

指针的大小与级别 类型均无关,只与操作系统(x86 4字节 x64 8字节)有关

int a=10;
int* p=&a;//一级指针
int** s=&p;//二级指针
*p=20;//此时a=20(解引用)
**s=30;//此时a=30(解引用)

例题:

int a = 1, b = 2;
	int *p = &a;
	int *q = &b;
	*p = 10;
	*q = 20;
	int **s = &p;
	int **t = &q;
	s = &q;
	t = &p;
	**s = 3;
	**t = 4;
	*s = *t;
	**s = 6;//最终a=6,b=3

*的含义
1)指针的定义:类型*名称

2)解引用:*变量;

3)乘法运算:数据*数据;

3.形参的改变要想改变实参的值必须:1.传指针 2.解引用

指针替换函数:

void swap(int *p,int *q)//a,b替换函数
{int temp;
temp=*p;
*p=*q;
*q=temp;
}
int main()
{int a=10,b=20;
swap(&a,&b);
printf("%d,%d",a,b);
}

数组中数字替换:

void swap(int *arr,int p,int q)
{int num=arr[p];
arr[p]=arr[q];
arr[q]=num;
}
int main()
{int arr[]={1,2,3,4,5};
int p=2,q=3;
swap(arr,p,q);
}

解引用:arr[0]具有解引用的功能

                *arr<=>*(arr+0)    arr[2]=*(arr+2)

类型对指针变量的两个作用:

1)解析存储单元大小

2)指针变量加1的能力

2.指针和数组的关系

int arr[]={1,2,3,4};
int *p=arr;//arr代表数组元素首地址,p<=>arr

p+1<=>&arr[1];

*(p+1)<=>arr[1]<=>*&arr[1];

&*p<=>arr<=>&arr[0];

 “*”与“&”的理解:

例如:

int a=10;int *pa=&a;

*&a可以理解为*(&a),&a表示取变量a的地址(等价于pa),*(&a)表示取这个地址上的数据,即*pa,也就是a;

&*pa可以理解为&(*pa),pa表示a的地址,*pa即取pa指向的值(a),&(*pa)即是取a的地址,也就是pa;

*&pa可以理解为*(&pa),(&pa)表示取pa的地址,*&pa表示取(&pa)上的数据,也就是pa本身;

  数组+整型能力强转:

数组名即为数组首元素的地址,指针+1即为加一个单元格,单元格的大小取决于指向的元素类型,

int arr[5]={1,2,3,4,5}
int *p=arr;
char *q=(char*)p;
double *m=(double*)p;
long long *l=(long long*)p;
printf("%d",*(p+1));//输出结果为2,p+1一次增加一个单元格,int 一次增加四个字节
printf("%d",*(q+1));//输出结果为0,char型,一次增加一个字节,
printf("%d",*(m+1));//输出结果为3,double型一次增加八个字节,即为两个单元格
printf("%d",*(l+1));//输出结果仍然是3,longlong型一次增加八字节,同上double
printf("%llx",*(l+1))//结果为4000000003,具体原因为内存的空间分配,

  再如上代码的前提下,

p<=>arr<=>&arr[0],        (p+1)<=>&arr[1]        (p+2)<=>&arr[2]

*p<=>arr[0]                    *(p+1)<=>arr[1]          *(p+2)<=>arr[2]

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1022751.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号