通俗易懂C语言-- 指针与数组(第一小节)

搭配VC++进行学习效果更佳

 指针的作用

1、指针可以使不同地方的代码共享内存数据,使得程序更加高效

2、指针可以进行数据传递

3、一些复杂的数据结构往往需要通过指针来构建

指针初探

int *p;//快递还在路上,菜鸟驿站先空出一个存放的空格
int a;//你的快递包裹
a=10;//商家给包裹里放了商品准备发快递
p=&a;//快递员把放了东西的包裹放进了准备的空格中,并把这个地址的取号码p发给了你

*p的值为(10)//你把取号码给了快递员,你最终拿到快递,撕掉包裹袋,得到了你想要的商品

通过一段代码,基本上已经讲完指针究竟是什么了,有人会说这值传来传去的,我直接定义一个p=a不就行了嘛,p=a相当于线下购买,要线上网购总不可能自己坐个飞机高铁去取吧?那这个实际怎么用呢?根据上面定义的内容,实现一下数据的传递,而且这种数据的传递只要你能找到这个函数,不管多远,都给你把值传过来。

通过指针进行数据传递

#include <stdio.h>

void swap (int *a, int *b) {
     int c;
     c = *a;
    *a = *b;
    *b =  c;
}
void main() {
    int x = 2, y = 3;
    swap(&x, &y);

    printf("%d", x);
    printf("%d\n", y);
    
}

通过上述代码,我们可以知道怎么通过指针来传递参数,这里需要注意一下,正常函数中&符号是取地址的意思,比如:p=&a;上述这种没有等式的,&有另一个意思:赋值给XX,比如scanf("%d",&a)的意思是输入一个数,然后把这个数赋给a,也就是说,swap函数中计算的最终*a的值、*b的值,赋给了x,y。既然赋值,那就得有初值,这个初值可以定义x=2,int *a,也可以定义*a=2,int x。

这种如果还不好理解,咱们重写一个重要的形式:

#include <stdio.h>

void swap (int *a, int *b) {
    *a = 7;
    *b = 8;
}
void main() {
    int x, y ;
    swap(&x, &y);

    printf("%d", x);
    printf("%d\n", y);
    
}

需要注意一点,swap函数并不一定会在主函数的文件中,很有可能在其他文件中,如果需要通过指针进行传值,可以自己做一个Lib,并把函数写入,相应的.h需要写入函数的表达式,并通过include <xxx.h>的形式在主函数文件中进行引用,这样就可以了,当然,这种传递对于普通的数据,使用普通的传递没问题,但是当数据比较复杂的时候,你再用普通的传递就不行了,下面看一下普通的传递:

#include <stdio.h>

void swap (int &a, int &b) {//& 这里表示引用,说明需要传递变量给这个函数
    a = 1;
    b = 2;
}

void main() {
    int x , y ;
    swap(x, y);
	printf("%d\n", x);
    printf("%d\n", y);   
}

这是指针的一些基础,别把指针想的太复杂了,这个等于那个,那个等于这个的,很多考试就喜欢跟你绕来绕去,那是筛选人用的,实际工作你要写代码绕来绕去的,非得被训一顿,能1+1=2最好,别10-1-2-3-2=2的

 脑筋急转弯:

int x=1;int *p=&x;int *p=&1;p=&x;

int x;int *p=&x;p=&x;*p=1;

理解上面哪些是错的,哪些该怎么用语言说明

猜你喜欢

转载自blog.csdn.net/u011397314/article/details/121141680
今日推荐