c<8>指针
创始人
2024-03-17 23:33:49
0

目录

2,指针的赋值

 2.1C语言允许指针赋值为0(初始化)

2.2指针赋值例

2.3输出指针的值

 3,用指针引用数组

 3.1利用指针输入数组

3.2优先级问题 

4.多维数组

5.字符串

 5.1通过指针引用字符串

4.函数中对指针的应用

4.1将指针变量作为函数参数

4.1.1指针的定义

4.1.2指针的引用

4.2将数组传递至函数中

5.函数指针

6.返回指针的函数


1,指针本身是一个地址,以int的形式保存

(32位用四个字节储存,64位操作系统用八个字节储存)

2,指针的赋值

一般来说指针是无法直接赋值的

当然可以用这种形式来强制赋值

(int*) p = 101;

 2.1C语言允许指针赋值为0(初始化)

int* a = 0;

常用 :(防止未初始化指针破化内存

if ( p != 0 )*p+1=xxxx;

宏定义

#define NULL 0

2.2指针赋值例

#include
void main()
{char c = '9', * sp1, * sp2;sp1 = &c; sp2 = sp1;printf("%c", *sp2);
}

2.3输出指针的值

pointer_1=&a;	//把变量a的地址赋给指针变量pointer_1pointer_2=&b;	//把变量b的地址赋给指针变量pointer_2 printf("a=%d,b=%d\n",a,b);	//输出变量a和b的值printf("*pointer_1=%d,*pointer_2=%d\n",*pointer_1,*pointer_2);//输出变量a和b的值

 3,用指针引用数组

当我们定义一个数组时

int a[100]={};

 a是数组的首地址,且是以常量指针的形式保存(不能通过a++等来更改

所以当我们针对数组进行一些操作时,通常将之复制到变量指针(P)上。

 3.1利用指针输入数组

#include 
int main()
{	int i,a[10],*p=a;	//p的初值是a,p指向a[0]printf("please enter 10 integer numbers:");for(i=0;i<10;i++)scanf("%d",p++);p=a;				//重新使p指向a[0]for(i=0;i<10;i++,p++)printf("%d ",*p);printf("\n");return 0;
}

 注意经过一系列 的p++会使得p指向数组的末位。需要读取数组需要重新使指针指向数组的首地址

3.2优先级问题 

++和*为同优先级

从左到右依次执行

4.多维数组

5.字符串

 5.1通过指针引用字符串

#include 
int main()
{	char string[]="I love China!";	//定义字符数组stingprintf("%s\n",string);		//用%s格式声明输出string,可以输出整个字符串printf("%c\n",string[7]);		//用%c格式输出一个字符数组元素 return 0;
}

 相当于

#include 
int main()
{	char *string="I love China!";	//定义字符指针变量string并初始化printf("%s\n",string);		//输出字符串return 0;

4.函数中对指针的应用

4.1将指针变量作为函数参数

4.1.1指针的定义

定义函数时需要同时定义指针变量

void swap(int *p1,int *p2)	
{
...
}

 值得注意的是:如下的*temp不指向变量而直接赋值,由于temp指向位置为随机,可能会覆盖原有数据,计算机并不允许此类操作

//错误示范
void swap(int *p1,int *p2)
{	int *temp;*temp=*p1;*p1=*p2;*p2=*temp;
}

4.1.2指针的引用

不需要加*

 swap(pointer_1,pointer_2);

4.2将数组传递至函数中

void inv(int x[],int n)		//形参x是数组名
{	int temp,i,j,m=(n-1)/2;for(i=0;i<=m;i++){	j=n-1-i;temp=x[i]; x[i]=x[j]; x[j]=temp;	//把x[i]和x[j]交换}return;
}
void inv(int *x,int n)			//形参x是指针变量
{	int *p,temp,*i,*j,m=(n-1)/2;i=x; j=x+n-1; p=x+m;for(;i<=p;i++,j--){	temp=*i; *i=*j; *j=temp;}	//*i与*j交换return;
}

they are the same

5.函数指针

we can use pointers to invoke defined functions

just like

int max(int,int);	//函数声明
int (*p)(int,int);	//定义指向函数的指针变量pp=max;	//使p指向max函数c=(*p)(a,b);		//通过指针变量调用max函数

6.返回指针的函数

int *a(int x,int y);

x和y是函数的形参,调用函数可以返回一个Int*型指针

we must return an adress  ##

float *search(float (*pointer)[4],int n)
//形参pointer是指向一维数组的指针变量
{	float *pt;pt=*(pointer+n);	//pt的值是&score[k][0]return(pt);
}

相关内容

热门资讯

广东建工:公司与广州地铁不存在... 证券之星消息,广东建工(002060)12月25日在投资者关系平台上答复投资者关心的问题。 投资者提...
“政策找人”暖民心 服务下沉“... 城乡居民基本医疗保险作为我国覆盖人群最多的基本医疗保险,是基本医疗保障体系中的重要一环。为切实维护人...
我市举办调解工作专题培训 为深入贯彻法治政府建设要求,全面提升基层矛盾纠纷化解能力,12月19日,市司法局牵头举办了全市调解工...
河南将优化涉企法律服务,营造法... 【大河财立方 记者 朱娟 见习记者 岳炎霖】12月26日,大河财立方记者在省政府新闻办召开的《河南省...
新版河南省优化营商环境条例哪些... 【大河财立方 记者 朱娟 见习记者 岳炎霖】12月26日,河南省政府新闻办召开《河南省优化营商环境条...
原创 中... 12月25日,家纺企业富安娜披露了关于中信证券固定收益类理财产品逾期兑付的进展公告。公告显示,公司近...
封关临近!海南自贸港政策红利释... 交易所数据显示,2025年12月26日09时47分,京粮控股当前价格为8.92元,涨幅为9.99%,...
字节跳动通报:120名员工被辞... 12月25日,字节跳动披露2025年三季度内部违规案例的处理情况。通报显示,三季度共有120名员工因...
上亿理财难收回,家纺龙头富安娜... 12月25日晚,家纺龙头企业深圳市富安娜家居用品股份有限公司(以下简称富安娜,002327.SZ)发...
华院计算取得法律要素图谱辅助类... 国家知识产权局信息显示,华院计算技术(上海)股份有限公司取得一项名为“一种法律要素图谱辅助类案推荐方...