浅谈C语言指针

本文探讨了一指针的基本概念,包括取址运算符和间接运算符,并详细讲解了如何定义指针,以及如何通过指针操作数组。随后介绍了指针在函数中的运用,涉及形参传递、改变变量值、返回指针和交换技巧。适合进一步理解C/C++中指针的实战应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一 指针的定义

 指针储存着地址,这样打比方,变量是一个房间,而变量的值是入住的客人,指针是客人手里的钥匙。

认识几种基础符号

& 取址运算符
*间接运算符,可以得到指针地址所对应的值

二 定义一个指针

// 定义一个指针指向变量
int *p=&b;
// 前面的(int)的类型根据所指向的变量的类型而改变
// 定义一个指针指向一维数组
int *p1=&b;
// 定义一个指针指向二维数组
int b[3][4];
int (*p2)[4]=b;
//b可被理解为含有三个一维数组的一维数组,所以指针应该是指向一维数组的指针
p2 = &b[0]; 
//这种形式也可,b[0][0]虽然也可以,但是编辑器有时候会报错

三 数组与指针

 数组在本质上也是指针,如数组名,n维数组的2—n-1维都算是指针

利用数组名访问数组元素

在一维数组中

*(a+1) 是a[1]的值

在二维数组中

*(*(b+1)+1) 是b[1][1]的值

以此类推…

四 指针与函数

1 以指针作为形参

int add(int *start,int *end)
{
    int total=0;
    while (start<end) {
        total+=*start;
        start++;
    }
}
//在主函数中,我们可以使用数组名作为实参进行传递,也可以定义指针

2 以指针改变变量的值

int *p=&a;
*p=1;
//此时a也变为1

3 子函数利用指针返回

返回指向一个数组的指针

int *all()
{
    int a[5]={1,2,3,4};
    return a;
}
// 返回一个字符数组,可以直接printf("%s",retstring)
char * retstring()
{
    static char name[10];
    strcpy(name,"张汉青");
    return name;
}

4 利用指针进行交换

 在子函数中如果形参为变量,那么函数进行的是值传递,无法改变变量,若是以指针作为形参,可以进行址传递,改变变量的值

 交换普通的变量

void swap(int *p1,int *p2)
{
    int temp=*p1;
    *p1=*p2;
    *p2=temp;
}

 交换结构体

struct tem
{
    int x;
    char a[20];
    int b[20];
};
//swaps用于交换数组里面的数
void swaps(int *x,int *y)
{
    int temp;
    temp=*x;
    *x=*y;
}
// swap1用于交换数组
void swap1(int a[],int b[])
{
    for (int i=1; i<=20; i++) {
        swaps(&a[i],&b[i]);
    }
}
void swap(struct tem *p1,struct tem *p2)
{
    struct tem temp;
    strcpy(temp.a, p1->a);
    swap1(temp.b, p1->b);
    temp.x=p1->x;
    strcpy(p1->a, p2->a);
    swap1(p1->b, p2->b);
    p1->x=p2->x;
    strcpy(p2->a, temp.a);
    swap1(p2->b, temp.b);
    p2->x=temp.x; 
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值