计算机二级课程记录(8)

地址与指针

存储地址

每一个变量地址的位置是该变量所占存储单元的第一个字节

指针变量

存储内存地址的变量p
类型名 *指针变量名

类型名 *指针名1,指针名2…
【例子1】

int  *pi;

表明只能存放int类型变量的地址
称作int是指针变量的基类型
【例子2】

double *pd;
char *s1,*s2;

pd的基类型为double型,s1,s2的基类型为char型
指向指针的指针
【例子3】

int **p, k,*s = &k;
p = &s;

【例子4】

#include<stdio.h>
main()
{
	int **k , *a ,b = 100;
	a = &b , k = &a; 
	printf("%d\n",**k); 
}
结果为100

【分析】

*a为指针变量,**k为指向指针的指针
b为100,b的地址为110,内容为100
a指向b的地址假设为111,内容为b的地址110
k指向a的地址假设为112,内容为a的地址111
那么**k为多少?
k为a的地址112,*k为a的内容110,**k为b的内容100。
指针的赋值

【例子5】

int k, *q,*p;
k = 1;
q = &k;
p = q;

那么q 和p 指向同一个地方k
赋值为空

int *p;
p = pull;
p = 0;
p ='\0'; 

【例子6】用指针指向两个变量,通过指针运算选出最小的那个数

#include<stdio.h>
main()
{
	int a ,b ,min,*pb,*pa,*pmin;
	pa = &a;
	pb = &b;
	pmin = &min;
	
	scanf("%d%d",pa,pb);//输入ab值
	printf("a = %d,b = %d",a,b);
	*pmin = *pa;
	if(*pa>*pb)
		*pmin = *pb;//比较大小
	printf("min = %d\n",min);
}

*变量 = 值
*与&为逆运算
*p++代表 *(p++)
++*p代表++(*p)
(*p)++

移动指针

使指针变量指向相邻的存储单元
指针变量+整型常量
【例子1】函数之间的地址值传递

#include<stdio.h>
int myadd(int *a,int *b)
{
	int sum;
	sum = *a +*b;
	return sum;
}
main()
{
	int x,y,z;
	printf("输出xy:");
	scanf("%d%d",&a,&b);
	z = myadd(&x,&y);//存放地址的值
	printf("%d+%d"\n,x,y,z); 	
}

【例子2】

#include<stdio.h>
void snb(int x,int y,int *z)
{
	*z = y - x:
}
main()
{	
	int a,b,c;
	sub(10,5,&a);
	sub(7,a,&b);
	sub(a,b,&c);
	printf("%d,%d,%d\n",a,b,c);
}
结果为-5,-12,-7

【例子3】通过传递地址值在被调用函数中直接改变调用函数中的变量的值

#include<stdio.h>
void swap(int*,int *);
void swap(int *a,int *b)
{
	int t;
	t = *a;
	*a = *b;
	*b = t;
	printf("%d%d",*a,*b);
}
main()
{
	int x = 30,y = 20;
	printf("x = %d y = %d\n",x,y);
	swap(&x,&y);
	printf("x = %d, y = %d",x,y);
	
}

【例子4】函数之间地址值的传递
编写函数order(int*a,int *b),使得函数的第一个实参为小的那个,后面为大的那个。

#include<stdio.h>
void swap(int *x1,int* x2)
{	
	int  t;
	t = *x1;
	*x1 = *x2;
	*x2 = t;
}
void order(int *a,int *b)
{
	if(*a>*b)
	swap(a,b);//比较两个值大小,小的在前面,大的在后面
}
main()
{
	int x,y;
	printf("输入xy值:");
	scanf("%d%d\n",&x,&y);
	printf("x = %d,y = %d",x,y);//输入2个值
	order(&x,&y);//调用函数order();
	printf("x= %d y = %d\n",x,y);
	
}

【例子5】
函数返回地址值
用指针的方法使得算出两值中的最大值

#include<stdio.h>
int *fun(int *,int*);
main()
{	
	int *p,i,j;
	printf("输入2个值:");
	scanf("%d%d",&i,&j);//输入2个值,比较大小
	p = fun(&i,&j);//调用函数fun()
	printf("i = %d,j = %d,*p = %d\n",i,j,*p);
}
int *fun(int *a,int*b)
{
	if(*a>*b)
		return a;
	return b;
}//返回最大值p
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值