C语言的精髓?C语言中最难拿下的知识?资深编程大牛为你详解指针!

大家都知道指针是C语言中的精髓,它能直接对物理地址进行访问,具有双重功能,是嵌入式设计中必不可少的一门语言。C语言功能强大的主要原因就是具有指针结构。指针是一种特殊的数据类型,直接指向目标的存储地址,实现直接访问对象存储空间的功能。学习更多C/C++知识可以去公众号“游戏开发教程”

很多初学者会产生这样的感觉:我可以用C语言学习其他知识,但我不理解指针。如果是这样,我可以很好地告诉你,你不是在学习编程语言。所以学习指针对于初学者来说是非常重要的。你可能认为它有点抽象,但是当你完全理解指针的含义时,你会发现指针非常方便使用。

1、指针指向变量:

学习更多C/C++知识可以去公众号“游戏开发教程”

下面有这样一个代码块:

int main()

void test(int x,int y)

最后输出的结果还是a=10,b=15。因为在函数调用时,实参和形参之间只是值传递。但我们使用指针结果就不一样了,如:

int main()

void test(int * x,int *y)

学习更多C/C++知识可以去公众号“游戏开发教程”

输出结果a=15,b=10。变量a和b的值发生了交换。这是因为我们利用指针访问变量的存储单元,间接修改变量的值。

关于怎么快速学C/C++,有什么方法,这个问题,想必大家都已经心中有数了,打算深入了解这个行业的朋友,可以加下小编的C/C++学习群:766+256+150不管你是小白还是大牛,小编我都欢迎,不定期分享干货,包括小编自己整理的一份2018最新的C/C++资料和0基础入门教程,欢迎初学和进阶中的小伙伴。

每天晚上20:00我都会开直播给大家mianfei分享C/C++学习知识和路线方法,群里会不定期更新最新的教程和学习方法(进群送2018C/C++学习教程),大家都是学习C/C++的,或是转行,或是大学生,还有工作中想提升自己能力的C/C++党,如果你是正在学习C/C++的小伙伴可以加入学习。最后祝所有程序员都能够走上人生巅峰,让代码将梦想照进现实,非常适合新手学习,有不懂的问题可以随时问我,工作不忙的时候希望可以给大家解惑。学习更多C/C++知识可以去公众号“游戏开发教程”

2、指针指向数组:学习更多C/C++知识可以去公众号“游戏开发教程”

定义一个数组并初始化,int array[5]=,定义一个指针变量并把数组的地址赋给它,int *p=array,注意数组名就是数组的地址,而且数组的地址就是首元素的地址。因此我们的指针变量就指向了数组的首元素,*p=2。如果把(p+1),那么指针变量就指向了数组的下一个元素5,因此我们可以利用指针来遍历数组的各个元素。数组名是一个指向数组中第一个元素的常量指针。

因此,在下面的声明中:

double balance[50];

balance 是一个指向 &balance[0] 的指针,即数组 balance 的第一个元素的地址。因此,下面的程序片段把 p 赋值为 balance的第一个元素的地址:

double *p;double balance[10];p = balance;

使用数组名作为常量指针是合法的,反之亦然。因此,*(balance + 4) 是一种访问 balance[4] 数据的合法方式。

一旦您把第一个元素的地址存储在 p 中,您就可以使用 *p、*(p+1)、*(p+2) 等来访问数组元素。下面的实例演示了上面讨论到的这些概念:

#include int main (){

/* 带有 5 个元素的整型数组 */

double balance[5] = ; double *p; int i; p = balance;

/* 输出数组中每个元素的值 */

printf( "使用指针的数组值\n"); for ( i = 0; i

printf( "使用 balance 作为地址的数组值\n"); for ( i = 0; i

当上面的代码被编译和执行时,它会产生下列结果:

使用指针的数组值*(p + 0) : 1000.000000

*(p + 1) : 2.000000

*(p + 2) : 3.400000

*(p + 3) : 17.000000

*(p + 4) : 50.000000

使用 balance 作为地址的数组值

*(balance + 0) : 1000.000000

*(balance + 1) : 2.000000

*(balance + 2) : 3.400000

*(balance + 3) : 17.000000

*(balance + 4) : 50.000000

在上面的实例中,p 是一个指向 double 型的指针,这意味着它可以存储一个 double 类型的变量。一旦我们有了 p 中的地址,*p将给出存储在 p 中相应地址的值,正如上面实例中所演示的。

3、指针指向字符串:

我们都知道用数组存储字符串,如char name[20]="jack",上面已经简单讲述了指针指向数组,所以我们可以这样做,char *name="jack",指针变量指向字符串的首个字符并可以依次访问字符串的各个字符。

4,指针指向函数:学习更多C/C++知识可以去公众号“游戏开发教程”

我们需要知道怎样表示一个指针指向函数,说白了就是语法要正确,下面我也取一个代码块来说明一下:

int sum(int x,int y)

int main()

不难发现上面代码块里语句(*p)(a,b)可以用p(a,b)来代替,因为p和sum就是一样的,只是用前者可能更容易理解一点。而我们要知道怎样定义一个指针指向函数,int (*p)(int,int)这是固定写法,前面的int是指针将来指向的函数的返回值的类型,如果没有函数返回值,那就是void,后面括号里的两个int 当然就是指针将指向的函数的形参。指针指向函数用起来确实有点抽象,要想熟练运用的话就多去做一些这方面的练习吧

5,指针指向结构体:学习更多C/C++知识可以去公众号“游戏开发教程”

在C语言中几乎可以创建指向任何类型的指针,包括用户自定义的类型。创建结构体指针是极常见的。下面是一个例子:

typedef struct {

char name[21];

char city[21];

char state[3]; } Rec;

typedef Rec *RecPointer;

RecPointer r;

r=(RecPointer)malloc(sizeof(Rec));

综上所述,指针的基本用法就是这几种,还有些用法不常见的小编在此就一一例举了,有兴趣的话可以去翻阅相关的资料。

如果本文对你有帮助的话请多多转发关注哦!有什么问题咱们评论区见!学习更多C/C++知识可以去公众号“游戏开发教程”

C语言的精髓?C语言中最难拿下的知识?资深编程大牛为你详解指针!_第1张图片


你可能感兴趣的:(C语言)