随笔 - 363, 文章 - 0, 评论 - 2, 阅读 - 23万
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

02c语言指针基础

Posted on   心默默言  阅读(185)  评论(0编辑  收藏  举报

& 用来取一个变量的地址

* 用来取一个地址的值

例如:

(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与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示