C语言指针.docx

上传人:b****4 文档编号:27491914 上传时间:2023-07-02 格式:DOCX 页数:12 大小:62.86KB
下载 相关 举报
C语言指针.docx_第1页
第1页 / 共12页
C语言指针.docx_第2页
第2页 / 共12页
C语言指针.docx_第3页
第3页 / 共12页
C语言指针.docx_第4页
第4页 / 共12页
C语言指针.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

C语言指针.docx

《C语言指针.docx》由会员分享,可在线阅读,更多相关《C语言指针.docx(12页珍藏版)》请在冰豆网上搜索。

C语言指针.docx

C语言指针

指针

1.指针与内存变量

1>指针概念:

指针变量用于存储地址的内存变量

2>指针变量定义

intx;

int*p;int*是指针变量类型,说明p中存放地址

p=&x;x=*p

区分:

intp;

3>指针变量存放谁的地址,就称指针变量指向谁

作用:

可以间接访问指向对象

intx;

int*p;

p=&x;

直接访问:

x,x=90;

间接访问:

*p,*p=90;

&地址符p=&x;

*间接访问符*p=x;

4>指针变量的应用(指针与内存变量之间的关系)

例题1:

通过函数调用交换两个变量的值。

必须掌握值和地址传递的区别

 

三种情况分析:

传值:

形参的变化不影响实参

地址传递:

形参中的指针变量存放地址,有指向关系,可间接访问,加*则改变原始内容

地址传递:

交换地址,只是指向交换,没改变原始数据

例题1:

通过函数调用实现a、b之和放入c中

2

*a

Intc

3

*b

*a==2*b=3

 

总结:

结果返回

return返回

指针变量

2.指针与一维数组的关系

首先明确:

数组名表示数组的首地址

1>关系(画图分析)

inta[10],*p;a[0]a[1]a[2]……

p=a;表示指针变量p指向了一维数组a

*p==a[0];

p+1==&a[1];

2>作用:

间接访问数组a

直接引用数组元素:

a[i]*(a+i)

间接引用数组元素:

p[i]*(p+i)

3>输入输出

通过指针变量p间接访问元素对数组进行输入输出

输入:

for(i=0;i<10;i++)scanf(“%d”,p+i)&a[i],a+i,p+i,p++

输出:

for(i=0;i<10;i++)printf(“%d”,p[i]);a[i],*(a+i),*(p+i),*(p++)

分析:

*a+i(*p)++

考点:

inta[10]={1,2,3,4,5,6,7,8,9,0},*p;

p=&a[2];

printf(“%d”,p[2]);

指针变量指向数组中某一单元格的地址,则该存储单元的值就是p[0]的值

4>应用

例题:

通过函数调用的形式计算数组的累加和。

 

#include

fun(int*p,int*q)

{

inti,s=0;

for(i=0;i

s+=p[i];

*q=s;

}

voidmain()

{

inta[10]={1,2,3,4,5,6,7,8,9,10},sum;

fun(a,&sum);

printf("%d",sum);

}

3.指针与字符串的关系

1>关系(画图分析)

chars[100],*p;

p=s;

p=&s[0];

2>作用:

利用指针变量间接访问字符串

直接引用字符串元素:

s[i]*(s+i)

间接引用字符串元素:

p[i]*(p+i)

3>遍历字符串

字符串函数strlen(地址)

gets(地址)

puts(地址)

strcpy(地址1,地址2)

chars[10]=”abcefg”;

chart[10];

strcpy(t,s);表示将s字符串的内容复制到t中

指针变量从起始地址开始输出,直到遇到’\0’结束

例题:

通过指针法对字符串进行逆置。

直接编写主程序

#include

#include

voidmain()

{

chars[10]={"abcdefg"},*p,*q,t;

p=s;

q=s+strlen(s)-1;

while(p

{t=*p;

*p=*q;

*q=t;

p++;

q--;

}

puts(s);

}

通过函数调用完成

#include

#include

voidfun(char*p,char*q)

{

chart;

while(p

{t=*p;

*p=*q;

*q=t;

p++;

q--;

}

}

voidmain()

{

chars[10]={"abcdefg"};

fun(&s[0],&s[strlen(s)-1]);

puts(s);

}

4.指针与二维数组的关系

1>通过建立一个指针数组引用二维数组元素

int*p[3],a[3][2],i,j;

for(i=0;i<3;i++)p[i]=a[i];

说明:

p是一个数组名,系统将为他开辟3个连续的存储单元

*号说明数组p是指针类型,他的每个元素都是基类型维int的指针

分析

a

表示二位数组首地址

a+i

表示第i行行地址

*(a+i)

表示第i行第一个格格地址

*(a+i)+j

表示第i行第j列的格地址

*(*(a+i)+j)

表示第i行第j列的值

 

这时可以通过指针数组p来引用a数组元素:

指针数组变量名引用

数组名引用

p[i][j]

a[i][j]

*(p[i]+j)

*(a[i]+j)

*(*(p+i)+j)

*(*(a+i)+j)

(*(p+i))[j]

(*(a+i))[j]

 

例如:

#include

voidmain()

{ints[3][4]={{1,2,3,4},

{5,6,7,8},

{9,10,11,12}

},i,j;

int*p[3];//指针数组

//p=s;错误语句

for(i=0;i<3;i++)p[i]=s[i];

printf("%d,%d",p[1],s[1]);

}

2>通过建立一个行指针引用二维数组元素

inta[2][3],(*prt)[3];

说明:

*号先与prt结合,说明prt是指针变量,然后再与说明符[3]结合,说明指针变量prt的集类型是一个包含有三个int元素的数组。

prt的类型与a的相同

prt=a是合法的赋值语句

prt+1等价于a+1

元素的引用

指针数组变量名引用

数组名引用

prt[i][j]

a[i][j]

*(prt[i]+j)

*(a[i]+j)

*(*(prt+i)+j)

*(*(a+i)+j)

(*(prt+i))[j]

(*(a+i))[j]

 

例如:

#include

voidmain()

{ints[3][4]={{1,2,3,4},

{5,6,7,8},

{9,10,11,12}

},i,j;

int(*prt)[4];

prt=s;

//printf("%d,%d",prt,s);

printf("%d,%d",prt[1],s[1]);

//printf("%d,%d,%d\n",&s[1][0],s[1],prt+1);

//printf("%d,%d",&s[1][2],prt[1]+2);

}

以上元素的引用,上机边练习边掌握

例题:

打印杨辉三角

#include

#defineN10

voidsetdata(int(*s)[N],intn)

{inti,j;

for(i=0;i

{s[i][i]=1;

s[i][0]=1;

}

for(i=2;i

for(j=1;j

s[i][j]=s[i-1][j-1]+s[i-1][j];

}

voidoutdata(ints[][N],intn)

{inti,j;

printf("杨辉三角:

\n");

for(i=0;i

{for(j=0;j<=i;j++)printf("%4d",s[i][j]);

printf("\n");

}

}

voidmain()

{inty[N][N],n=7;

setdata(y,n);

outdata(y,n);

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > 从业资格考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1