当前位置:首页 > 经验 >

c语言指针最容易明白的详解(c语言指针的基本使用方法)

来源:原点资讯(www.yd166.com)时间:2024-03-26 21:08:14作者:YD166手机阅读>>

指针是C语言的难点,本篇文章总结一下各类指针的用法。

指针是个变量,它存储的是变量的地址,这个地址指向哪里,取决于指针的类型,指针类型包括以下几种:

基本类型指针

数组类型指针

函数类型指针

结构体类型指针

联合体类型指针

指针类型指针

无具体类型指针

下面阐述各个类型指针的使用方法。

一.基本类型指针

声明方式:

基本类型*p;

变量p是一个基本类型指针,p存储的是基本类型变量的地址,表示p指向了基本类型,基本类型包括char,short,int,float,long,double。

例如int*p,p就变成了一个整型指针,如下图

c语言指针最容易明白的详解,c语言指针的基本使用方法(1)

使用例子:

#include <stdio.h> void swap(int* a, int* b); int main(int args, char *argv[]) { int a = 10; int b = 20; int*pa = &a;//获取变量a的地址赋值给指针pa int* pb = &b; printf("%i\n", *pa);//输出10 *pa = *pa 1; printf("%i\n", *pa);//输出11 int* clonep = pa; printf("%i\n", *clonep);//输出11 clonep = pb; printf("%i\n", *clonep);//输出20 int c = *pa; printf("%i\n", c);//输出11 c = c 1; printf("%i\n", c);//输出12 printf("%i\n", *pa);//输出11 // 互换pa和pa指向的变量的值 swap(pa, pb); printf("%i\n", a);//输出20 printf("%i\n", b);//输出11 } // 互换a和b两个变量的值 void swap(int* a, int* b) { int temp = *a; *a = *b; *b = temp; }

从上面代码的例子,可以看出以下几点:

a.通过&运算符可以获取一个变量的地址,&运算符只能获取内存变量的地址,不能对常量或者寄存器变量进行&操作。

b.可以通过*p,获取指针p指向的变量的值。

c.函数调用时,会把传入的变量拷贝一份作为参数,这里的拷贝就是把变量的值拷贝了一份,自此后,参数就是一个新的变量,它与传入的变量的值相同,任何对参数值的修改,都不会影响到传入的变量。

指针也是变量,只不过指针的值是地址罢了,所以也可以把指针变量传入给函数作为参数(代码21行),函数调用时,会把传入的指标变量拷贝一份作为参数,这个参数就是一个新的指针变量,它与传入的指针变量指向了同一个地址,所以在函数内部可以对这个参数指针指向的变量进行操作,效果与传入的指针变量一样。

二.数组类型指针

一维数组类型指针的声明方式:

T (*p)[N];

变量p是一个数组指针,p存储的是一维数组T[N]的地址,表示p指向了一维数组,一维数组的长度为N,一维数组每一项的数据类型为T,T可以是基本类型,指针,结构体,联合体。

例如int (*p)[2] 表示p指向了一维整型数组,这个整型数组长度为2,如下图是一个二维数组a[3][2],这个二维数组由3个一维数组(每个一维数组有2个整型元素)组成。

c语言指针最容易明白的详解,c语言指针的基本使用方法(2)

一维数组指针

使用例子

#include <stdio.h> int main(int args, char *argv[]) { int a[3][2] = { {1,2},{3,4},{5,6} }; int(*p)[2] = a; printf("%i\n", **p );//输出1 printf("%i\n", **p );//输出3 printf("%i\n", **p);////输出5 p = &a[0]; printf("%i\n", ** p);//输出3 printf("%i\n", ** p);//输出5 printf("%i\n", **p);////输出5 }

上面代码例子定义了一个二维数组a[3][2]

第4行代码:int(*p)[2] = a;a是二维数组的首地址,它是一个常量,所以可以直接赋值给p,a与一维数组a[0]的地址相同即a=&a[0],此时p存储的就是一维数组a[0]的地址,指向了一维数组a[0]。

第5行代码:**和 运算都属于一元运算符,它们的优先级相同,但运算方向是从右向左的,因此先执行p ,而p 的意思是先操作p变量,然后再将p变量 1,这里操作p变量的意思是先执行**p,为什么需要两个*才能获取到二维数组的元素值呢,原因如下:

**p是从右向左执行的,先执行右边的*,因此先执行*p,*p的意思获取p指向的变量,而p指向的是一维数组,所以*p的结果就是a[0],a[0]是个一维数组,所以**p=*(a[0]),C语言规定,对数组可以执行*操作时,会临时转化为一个指针,因此可以a[0]就临时变成了一个指针,再次对a[0]进行*操作后,就获取到了a[0]这个一维数组第一个元素的值即1。

第6行代码:第5行代码p 后,p指向了a[1]的地址,如下图

c语言指针最容易明白的详解,c语言指针的基本使用方法(3)

类似于第5行代码的执行方式,此时**p 后,获取的变量值为a[1]的第一个元素即3

第7行代码:第6行代码p 后,p指向了a[2]的地址,如下图

c语言指针最容易明白的详解,c语言指针的基本使用方法(4)

首页 12下一页

栏目热文

刀剑封魔录手游官网(刀剑封魔录游戏手机下载)

刀剑封魔录手游官网(刀剑封魔录游戏手机下载)

今天的主角:《刀剑封魔录》《刀剑封魔录》由像素软件科技发展有限公司制作的一款新型动作角色扮演游戏(ARPG),发布于20...

2024-03-26 21:09:24查看全文 >>

创新可以带来什么(创新有哪些问题)

创新可以带来什么(创新有哪些问题)

人民日报当今世界正经历百年未有之大变局,新一轮科技革命和产业变革蓬勃兴起。一段时间以来,中国企业走出去步伐明显加快,更广...

2024-03-26 21:11:07查看全文 >>

创新的定义(创新包括哪几种创新)

创新的定义(创新包括哪几种创新)

熊彼特认为,创新就是建立一种新的生产函数,也就是把一种从来没有过的关于生产要素和生产条件的“新组合”引入生产体系。这种新...

2024-03-26 20:59:46查看全文 >>

什么是创新定义(对创新的理解)

什么是创新定义(对创新的理解)

编辑导语:当下产品竞争愈发激烈,若想在众多品牌中脱颖而出,创新是必不可少的。不过,创新也需要方向指引。那么企业或品牌应当...

2024-03-26 20:53:17查看全文 >>

什么叫创新怎么创新(简单阐述什么是创新)

什么叫创新怎么创新(简单阐述什么是创新)

有很多知识都是前辈告诉我的用了很久让我对工作顺利可是慢慢的我陷入了苦恼这些我用了很久的办法把我逼进 了死角我看不到希望也...

2024-03-26 21:02:01查看全文 >>

c语言的指针怎么定义(c语言指针的定义及基本使用)

c语言的指针怎么定义(c语言指针的定义及基本使用)

指针是C语言中的一个重要概念,它是一种特殊的变量类型,用来存储内存地址。指针变量本身存储的是一个地址,而这个地址指向的是...

2024-03-26 21:47:22查看全文 >>

c语言指针例题详解(c语言指针全部用法及例题)

c语言指针例题详解(c语言指针全部用法及例题)

指针在C语言中是一块很重要的内容,也是比较难理解的一块内容,我们需要反复理解反复巩固才可以对其有所了解。之前也分享过指针...

2024-03-26 21:45:20查看全文 >>

蜗牛狂奔的作品有哪些(奔跑的蜗牛作品全集)

蜗牛狂奔的作品有哪些(奔跑的蜗牛作品全集)

蜗牛是一位很识时务的作者,哪个流派火就写那个,其小说也包含了玄幻、修真、奇幻、都市等等。其中天魔三部曲也涉及了三种类别。...

2024-03-26 21:45:33查看全文 >>

狂奔的蜗牛的全部作品(发飙的蜗牛的所有小说作品集)

狂奔的蜗牛的全部作品(发飙的蜗牛的所有小说作品集)

在网络小说中,好的作品层出不穷,有很多经典总是能让人念念不忘。这些小说陪着你度过那些美好岁月,总能在小说里找到不一样的体...

2024-03-26 21:05:20查看全文 >>

狂奔的蜗牛作品最新(发飙的蜗牛作品列表)

狂奔的蜗牛作品最新(发飙的蜗牛作品列表)

文章转载网络,侵权请联系立删作者:狂奔的蜗牛我是太子沈煜最忠心的一把刀。亲自助他登上帝位。待他坐稳帝位他说要给我一人之下...

2024-03-26 21:26:59查看全文 >>

文档排行