& 用来取一个变量的地址
* 用来取一个地址的值
例如:
(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); system("pause"); return 0; }

二、值传递
#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两个变量。
而址传递直接将地址传入到函数内,并通过指针将数值对换,因此交换成功
下面为几个指针的例子
#include <stdio.h> void fun(int *x, int *y) { printf("%d %d \n", *x, *y); *x = 3; *y = 4; } main() { int x = 1, y = 2; fun(&x, &y); printf("%d %d", x, y); }
#include <stdio.h> void swap(int *p1, int *p2) { int *temp; temp = p1; p1 = p2; p2 = temp; } main() { int a, b; int *p1 = &a, *p2 = &b; printf("%d %d\n", &a, &b); scanf_s("%d %d", p1, p2); swap(p1, p2); printf("%d %d\n",*p1,*p2); printf("%d %d", &a, &b); }
地址也并没有进行交换
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)