c语言的灵魂:指针

本文介绍了C语言中的指针概念,包括指针的定义、用法,如通过指针直接访问和修改变量的值,以及作为函数参数。文章通过示例解释了为何需要使用指针,如在函数间交换变量和数组排序,并强调了使用指针时需要注意的事项,如避免未初始化、内存分配和指向错误。
摘要由CSDN通过智能技术生成

c语言之初识指针

指针是C语言中的一种重要概念,是c语言的灵魂。使用指针可以对内存进行直接、灵活的操作。本篇博客将向大家介绍指针的定义、用法及案例,并提醒大家使用指针时应注意的事项。

指针的定义

在C语言中,指针是一个变量,用来存储另一个变量的地址。指针变量一般使用”*”来声明,例如:

int *ptr; //ptr是一个整型指针变量

上述代码声明了一个指针变量ptr,其指向一个整型变量。就像之前学的,
整型变量:存放整型数据的变量;
字符变量:存放字符型数据的变量;
指针变量:存放指针的变量(存放地址的变量,自身也有自己的地址);
大家可以这样理解,指针就是地址,地址就是指针。

下面通过这个简单的入门案列,带大家慢慢理解指针。

int main()
{
	int a = 45;
	
	int *p;   //*:标识符,只在定义或声明指针变量的时候。与下面的*不一样
	p = &a;  //初始化
	
	printf("通过变量名访问值:%d\n",a);
	printf("通过地址访问值:%d\n",*(&a)); //*:取值运算符,把地址中的数取出来。
	printf("通过指针变量访问值:%d\n",*p);//*:取值运算符,取出指针p里的值
	
	return 0;
}

为什么需要指针

大多数小伙伴学不好c语言就是因为学不好指针,下面通过案列让小伙伴们知道使用指针的理由。

理由1

//==========================不用指针==============================
#include<stdio.h>

void changeData(int a,int b)
{
	int tmp;
	tmp = a;
	a = b;
	b = tmp;	//只能交换局部的。
}

int main()
{
	int data1 = 10;
	int data2 = 85;
	
	printf("main交换前:data1=%d  data2=%d\n",data1,data2);
	
	changeData(data1,data2);
	
	printf("main交换后:data1=%d  data2=%d\n",data1,data2); 
	
	//交换不了,因为虽然传递的数值一样,但是地址不一样。
	
	return 0;
}

//==========================使用指针==============================
void changeData(int *a,int *b) //用指针变量去间接访问main函数中的值。
{
	int tmp;
	tmp = *a;
	*a = *b;
	*b = tmp;	
}

int main()
{
	int data1 = 10;
	int data2 = 85;
	
	printf("main交换前:data1=%d  data2=%d\n",data1,data2);
	
	changeData(&data1,&data2);//传递地址,所以用指针变量存放地址。
	
	printf("main交换后:data1=%d  data2=%d\n",data1,data2);
	
	return 0;
}

理由2

#include<stdio.h>

int main()
{
	int a = 45;
	
	printf("address of a :0x%p\n",&a);  //0x000000000061FE1C
	
	int *p = (int *)0x000000000061FE10;// 通过指针指向固定区域。
	//volatile unsigned int *p = (volatile unsigned int *)0x000000000061FE10;
	printf("address of p : 0x%p\n",p);
	
	return 0;
}

指针的用法

指针在C语言中有着重要的作用,通过指针,我们可以获取变量的地址,直接访问和修改变量的值。以下是指针的一些用法:

  1. 获取变量的地址:
int var = 10; 
int *ptr = &var; //获取var的地址并赋值给指针ptr
  1. 直接访问和修改变量的值:
int var = 10; 
int *ptr = &var; //获取var的地址并赋值给指针ptr
*ptr = 20; //修改var的值为20
  1. 可以使用指针变量来作为函数的参数:
void addOne(int *num) {
    *num = *num + 1;
}

int main() {
    int var = 10;
    addOne(&var); //将var的地址传给addOne函数
    printf("%d", var); //var的值被修改为11
    return 0;
}

指针的练习

下面给出一个案例,通过指针对数组进行排序:

#include <stdio.h>

void bubbleSort(int *arr, int n) {
    int i, j, temp;
    for (i = 0; i < n - 1; i++) {
        for (j = 0; j < n - 1 - i; j++) {
            if (*(arr + j) > *(arr + j + 1)) {
                temp = *(arr + j);
                *(arr + j) = *(arr + j + 1);
                *(arr + j + 1) = temp;
            }
        }
    }
}

int main() {
    int arr[] = { 3, 1, 2, 5, 4 };
    int n = sizeof(arr) / sizeof(int);
    int i;

    bubbleSort(arr, n);

    for (i = 0; i < n; i++) {
        printf("%d ", *(arr + i));
    }

    return 0;
}

上述代码通过指针将一个整型数组进行了排序,通过指针对数组元素进行了操作。

指针的注意事项

指针在使用过程中应注意以下几点:

  1. 在指针使用前要为其赋值,否则指针将指向一个无效的地址,可能会导致程序异常。

  2. 在使用指针时,要确保指针指向的空间已经被分配,否则可能会导致程序崩溃。

  3. 在使用指针时,要确保指针的指向正确,避免出现野指针或空指针等异常情况。

  4. 指针可以进行指针算术和比较运算,但要注意不要越界或将不同类型的指针进行运算。

总结

指针是C语言中一个重要的概念,通过指针可以对内存进行直接、灵活的操作。使用指针时,需要注意指针的定义、用法以及注意事项。指针在程序中有着广泛的应用,掌握指针的使用方法能够提高程序的效率和代码的可读性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值