C语言——指针学习

1.指针定义、初始化

        什么是指针呢,用我们生活中的例子来说就比如是超市里面存货柜的编号、外卖箱的箱号等等。 那么它是干什么的呢?我们是不是可以通过这个编号、箱号找到对应的货柜、外卖箱对不对,那么我们的指针也是有着异曲同工之处,只不过指针是计算机内存里面的存储单元的地址,我们通常会拿一个变量来存放这个地址 ,我们把他称为指针变量 。 那么现在我们来定义一个指针,看看指针是如何定义的。

#include <stdio.h>

int main(int argc,const char *argv[])
{
    int a = 10;           // 定义一个变量
    int * p;              // 定义一个指针变量: 所指数据类型  * 指针变量名
                          // 这里我们需要将指针指向整型变量a,所以定义是int型 
    p = &a;               // 对指针p 进行赋值 ,& : 是取地址符,就是获取变量a 的地址

    

    return 0;
}

        那么现在变量p 就是一个指针变量,它存储的数据就是变量a的地址,那么我们现在就可以通过这个指针变量来访问变量a的值了

#include <stdio.h>

int main(int argc,const char *argv[])
{
    int a = 10;           // 定义一个变量
    int * p;              // 定义一个指针变量: 所指数据类型  * 指针变量名
                          // 这里我们需要将指针指向整型变量a,所以定义是int型 
    p = &a;               // 对指针p 进行赋值 ,& : 是取地址符,就是获取变量a 的地址

    printf("a = %d\n",*p);     // *p 就是对变量进行取值,就是获取该指针所指向的值

    return 0;
}

j结果输出为:

2.指针作为参数传入函数,交换两个变量的值

#include <stdio.h>

// 声明一个函数,ChangeVariable,用于交换两个整数指针所指向的值
void ChangeVariable(int * p, int * q);

int main(int argc, const char* argv[])
{
    int a = 10, b = 6; // 定义两个整数变量 a 和 b,并分别赋值 10 和 6
    int * p, * q;      // 定义两个整数指针 p 和 q

    p = &a; // 将 p 指向变量 a 的地址
    q = &b; // 将 q 指向变量 b 的地址

    // 输出交换前的 a 和 b 的值
    printf("a = %d, b = %d\n", a, b);

    // 调用 ChangeVariable 函数,用 p 和 q 作为参数
    ChangeVariable(p, q);

    // 输出交换后的 a 和 b 的值
    printf("a = %d, b = %d\n", a, b);

    return 0; // 返回 0,表示程序正常结束
}

// 定义 ChangeVariable 函数,用于交换两个指针所指向的整数值
void ChangeVariable(int * p, int * q)
{
    int temp = *p; // 用临时变量 temp 保存 p 指针指向的值
    *p = *q;       // 将 q 指针指向的值赋给 p 指针指向的位置
    *q = temp;     // 将 temp 的值赋给 q 指针指向的位置
}

        我们通过传入指向两个变量的指针p,q然后使用临时变量temp暂时接受p指针所指的值,然后交换p和q指针所指的值,最后打印出来结果为

3.指针与数组

        通过指针打印数组,直接上代码:

#include <stdio.h>

int main(int argc, const char* argv[])
{
    char str[] = "abcdefg"; // 定义一个字符数组 str 并初始化为 "abcdefg"
    char * p;               // 定义一个字符指针 p
    p = str;                // 让 p 指向字符数组 str 的起始地址

    // 计算字符数组的长度(包括末尾的空字符 '\0')
    int n = sizeof(str) / sizeof(char);

    // 使用 for 循环遍历字符数组,并通过指针 p 逐个打印每个字符
    for(int i = 0; i < n; i++)
    {
        printf("%c ", *p); // 打印当前指针 p 所指向的字符
        p++;               // 移动指针 p 到下一个字符的位置
    }

    printf("\n"); // 输出换行符

    return 0; // 返回 0,表示程序正常结束
}

后续敬请待下次发布

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值