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得出数组的大小,所以我们要用到数组大小时,需要直接传入函数。有了指针以后,不仅可以对数据本身,也可以对存储数据的变量地址进行操作。
以上便是我粗浅的总结,欢迎大家在评论中指出问题。
浙公网安备 33010602011771号