C语言指针应用

C语言指针

  指针是C语言学习中的难点,我稍微总结了一些指针的使用,还有类似函数指针这种比较难的应用在本篇中不加以叙述。(可能会放在下一篇博客中)

 


 

什么是指针?

 

  指针也就是内存地址,指针变量是用来存放内存地址的变量,不同类型的指针变量所占用的存储单元长度是相同的,而存放数据的变量因数据的类型不同,所占用的存储空间长度也不同。在C语言中它存放的是一个地址,我们可以通过一个指针去访问一个地址所存放的值。

#include<stdio.h>
int main()
{
	int* a;
	int k = 80;
	a = &k;
	printf("%d", *a);
	return 0;
}

 

  这是一个简单的代码,我定义了一个指针a,用a去储存k的地址,通过a读取k的d地址去输出k的值。改变k的值则*a的值也随之改变。

指针数组

  当我们使用数组时经常会碰到一个问题,数组的大小不确定,容易造成一些运行错误。这时我们可以利用指针完美的解决这个问题。

#include<stdio.h>
#include<malloc.h>
int main()
{
    int* a;
    int n;
    scanf("%d", &n);
    a = (int*)malloc(n * sizeof(int));
    return 0;
}

 

 在这段代码中我们先输入了所需数组的大小,然后利用动态内存分配去给这个数组分配足够的空间。之后就可以根据需要进行其他操作。其中*a就等于a[0],*(a+i)就等于a[i]。

指针在函数的应用

 在函数中利用指针可以应用在数组和链表等诸多领域,例如下面的代码。

#include<stdio.h>
#include<malloc.h>
void chance(int *a,int n);
int main()
{
    int* a;
    int n, i;
    scanf("%d", &n);
    a = (int*)malloc(n * sizeof(int));
    for (i = 0; i < n; i++) {
        scanf("%d", &a[i]);
    }
    chance(a,n);
    for (i = 0; i < n; i++) {
        printf("%d\n", a[i]);
    }
    return 0;
}
void chance(int *a,int n) {
    int i;
    for (i = 0; i < n; i++) {
        *(a+i)+=1;
    }
}

 

  我们通过将数组a的首地址传入函数,在函数中将数组中的每个元素加1。在正常情况下,我们不能在函数中改变一个数组中的值,因为它是一个局部变量。所以我们用指针传入数组的地址,直接在地址上改变数组的值。值得注意的是我们传入函数的只是一个数组的首地址,所以不能在函数中直接用sizeof得出数组的大小,所以我们要用到数组大小时,需要直接传入函数。有了指针以后,不仅可以对数据本身,也可以对存储数据的变量地址进行操作。

  以上便是我粗浅的总结,欢迎大家在评论中指出问题。

 

 

 

posted on 2021-10-25 17:39  超级全能生  阅读(164)  评论(2)    收藏  举报

导航