C语言指针基础

& 用来取一个变量的地址

* 用来取一个地址的值

例如:

(1)&n 获取n的地址

int *p=&n;

*p就等于p的值

(2)

假设 int n=10;

*(&n) 就等于先取了n的地址 然后又取了这个地址的值 也就是n 结果是是

&(*n)就等于先取了地址为10的值,再去取这个值的地址。(但这种是错误的,一定要避免,你不知道地址为10里面到底是什么东西)


指针初始化

一般写法
int I;
int *p;
p=&I;

指针P用来存放I的地址(指针就是用来存储一个变量的地址的)

简化写法

int i;
int *p=&I

常见错误:

(1)不可以直接给指针赋值

eg:

int *p;

p=10010;//(错误)

(2)scanf的错误

eg:

int n;

scanf("%d",n);//正确应该为&n

向系统输入一个n的地址 

数据交换

关于函数中的值传递与址传递

一、址传递

#include<stdio.h>
void swap(int *i, int *n)
{
	int t;
	t = *i;
	*i = *n;
	*n = t;
	printf("%d %d\n", i, n);
}
int main()
{
	int i = 15,n=33;
	printf("%d %d\n", &i, &n);
	swap(&i, &n);
	printf("%d %d\n", i, n);
	return 0;
}


swap(&i, &n);//主函数中的调用

void swap(int *i, int *n)//

交换函数可以理解为 *I=&I; *n=&n;指针获得了变量I,n的地址

二、值传递

#include<stdio.h>
void swap(int i, int n)
{
	int t;
	t = i;
	i = n;
	n = t;
	printf("%d %d\n", i, n);
}
int main()
{
	int i = 15,n=33;
	printf("%d %d\n", &i, &n);
	swap(i, n);
	printf("%d %d\n", i, n);
	return 0;
}


值传递中发现值并没有发生交换,那是因为函数的形式参数不影响主函数中的i,n两个变量。

而址传递直接将地址传入到函数内,并通过指针将数值对换,因此交换成功


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值