c语言中指针怎么使用?

如题所述

1、使用场景

使用指针时,必须将它指向一个变量的地址或者为它分配空间方能使用,如下所示:

#include<stdio.h>

#include <stdlib.h>

int main(int argc, char const *argv[])

{

int a[5]={0,1,2,3,4};

int *b,*d;

int c=2;

int *e=a; //e指向a数组首地址

//*b=2;   无法直接初始化

//printf("%d\n", *b);

e=e+2;  //移动两个地址单元

d=&c;  //d指向c的地址来表示值

c=4;   //修改原c变量的值,d指针的值会发生改变

b=(int *)malloc(sizeof(int));//为b分配一个int型空间来直接存储值

*b=2;//分配空间后可以直接赋值了

printf("this is e,b,c,d :%d %d %d %d\n",*e,*b,c,*d);

2、类型说明

(1)int *a :表示一个指向int型变量的指针,指向的是变量的地址单元

(2)char *b:表示一个指向char变量的指针

*a表示的是这个指针指向地址的值,a为此指针本身的地址,这点要明确,一般用*(a+1)、*(a+2)来表示值,如:

int nums[5]={0,1,2,3,4};

int *a=nums;

printf("%d %d %p\n",*a,*(a+1),a);

扩展资料:

指针的运算

指针指向变量地址,若原变量的内容发生了变化,它本身也会发生变化,指针之间的运算一般为值运算和地址运算

(1)值运算:直接通过*运算方式,像a+*(a+1),结果为第一个元素与第二个元素相加。

int nums[5]={0,1,2,3,4};

int *a=nums;

(2)地址运算:通过a+i的方式.指针会指向a的下i个地址。

int nums[5]={0,1,2,3,4};

int *a=nums;

a=a+2;

printf("%d\n",*a);

结果输出2。 

参考资料来源 :指针-百度百科

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2019-10-31

1、指针指向变量:

下面有这样一个代码块:

int  main()

{int a=10;int b=15;test(a,b);printf("a=%d,b=%d\n",a,b);}

void test(int  x,int y)

{int tmp;tmp=x;x=y;y=tmp;}

最后输出的结果还是a=10,b=15。

因为在函数调用时,实参和形参之间只是值传递。

但我们使用指针结果就不一样了,如:

int  main()

{int a=10;int b=15;test(&a,&b);printf("a=%d,b=%d\n",a,b);return 0;}

void test(int * x,int *y)

{int tmp;tmp=*x;*x=*y;*y=tmp;}

输出结果a=15,b=10。变量a和b的值发生了交换。

这是因为我们利用指针访问变量的存储单元,间接修改变量的值。

2、指针指向数组:

定义一个数组并初始化,int array[5]={2,5,12,7,8},定义一个指针变量并把数组的地址赋给它,int *p=array,注意数组名就是数组的地址,而且数组的地址就是首元素的地址。

因此我们的指针变量就指向了数组的首元素,*p=2。如果把(p+1),那么指针变量就指向了数组的下一个元素5,因此我们可以利用指针来遍历数组的各个元素:

int  main()

{int array[5]={2,5,12,7,8};int *p =array;for(int i=0;i<5;i++){printf("array[%d]=%d\n",i,*(p+i));}return 0;}

3、指针指向字符串:

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

4、指针指向函数:

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

int sum(int x,int y)

{return x+y;}

int main()

{int a=5;int b=6;int (*p)(int,int);p=sum;int result=(*p)(a,b);printf("The result is %d\n",result);return 0;}

不难发现上面代码块里语句(*p)(a,b)可以用p(a,b)来代替,因为p和sum就是一样的,只是用前者可能更容易理解一点。

而我们要知道怎样定义一个指针指向函数,int (*p)(int,int)这是固定写法,前面的int是指针将来指向的函数的返回值的类型,如果没有函数返回值,那就是void,后面括号里的两个int当然就是指针将指向的函数的形参。

5、指针指向结构体:

我们首先首先定义一个结构类型,

struct student

{     char *name;

int  ages;};

再根据类型定义结构体变量struct student stu={"Rose",15};

定义一个指针指向结构体类型,struct student *p;把结构体变量stu的地址赋给指针变量p,p=&stu;

我们可以有3种方式来访问结构体中的属性ages:stu.ages=15;(*p).ages=15;p->ages=15;不过第三种方式在C语言中只能用来指向结构体。

扩展资料:

指针的用途非常广泛,比如如果你想通过函数改变一个变量的值,就得用指针而不能用值传递。还有在很多时候变量,特别是对象的数据量实在太大,程序员就会用指针来做形参,只需要传递一个地址就行,大大提高了效率。简单地说指针就是指向变量和对象的地址。

基本说明:

1、在计算机中,所有的数据都是存放在存储器中的。 一般把存储器中的一个字节称为一个内存单元, 不同的数据类型所占用的内存单元数不等,如整型量占2个单元,字符量占1个单元等;

2、为了正确地访问这些内存单元,须为每个内存单元编上号。 根据一个内存单元的编号即可准确地找到该内存单元。既然根据内存单元的编号或地址就可以找到所需的内存单元,所以通常也把这个地址称为指针。内存单元的指针和内存单元的内容是两个不同的概念。

参考资料:百度百科-指针

本回答被网友采纳
第2个回答  推荐于2017-10-01
我是这样理解的:
在C语言中,你需要定义变量,那么你所定义的这个变量本身你要理解两层含义:
(1)变量中的值是多少?有了值我们可以直接拿变量参与运算,eg. int a=5;在计算的时候a就表示5;
(2)变量存储在内存中的什么位置?变量的存储位置,就是变量的地址,那么这个地址可以用指针来存储,eg. int a=5, *p=&a; 在这里p就是指针变量,存储了变量a的地址,这个时候你要是用a变量的值,即可以直接用a,也可以用*p,*p是通过p这个指针(也就是a的地址),间接的找到a,在程序中*p与a是等价的。追问

那么*p,**p,***p有什么区别?

追答

*p,**p,***p分别叫做一级指针、二级指针和三级指针。
如果这样定义: int a,*p,**q,***r;
第一个 *p 中的p 用来存放普通变量的地址,例如赋值: p=&a;
第二个**q中的q,你可以这样理解 用来存放地址 的地址,虽然有点绕,你可以体会一下,比如上一个p,它是指针型变量,这个变量的值是变量a的地址,那么p这个变量存在哪,它的地址在哪呢?这个时候就需要一个比p高一层的指针来存放p变量的地址,因此可以这样赋值 q=&p
第三个***r,道理同上,可以这样赋值 r=&q
你看看是不是能容易理解!

本回答被提问者采纳
第3个回答  2012-04-19
指针可以理解为地址即指向地址的指针,在使用之前要明确三个问题,指针的类型,指针指向的类型,指针指向值的内存区域。通过传递值的地址来传递值
第4个回答  2012-04-16
指针是指向地址的,所以你对指针修改也会影响到原地址的值,所以当你需要在函数里修改函数外的变量时可以考虑指针,当然指针还可以连接结构体里的节点之类的,后面还有跟函数有关的,只要多揣摩就会了解了

c语言中指针怎么使用?
使用指针时,必须将它指向一个变量的地址或者为它分配空间方能使用,如下所示:include<stdio.h> include <stdlib.h> int main(int argc, char const *argv[]){ int a[5]={0,1,2,3,4};int *b,*d;int c=2;int *e=a; \/\/e指向a数组首地址 \/\/*b=2; 无法直接初始化 \/\/printf(...

c语言的指针具体用法
指针是一个变量,其值为另一个变量的地址。通过指针,可以间接访问该变量,实现对内存的直接操作。指针在C语言中的应用非常广泛,如数组操作、函数参数传递、动态内存分配等。二、指针的具体用法 指针变量的声明和初始化:指针变量声明时需要有指针类型,且使用时需要先赋值。例如:int *p = &a; 其中a...

c语言指针用法?
指针的主要用法包括指向变量、指向数组、指向字符串等。指针的使用涉及指针变量的声明、赋值操作、指针的算术运算等。熟练掌握指针的用法对于提高C语言编程能力至关重要。指针是C语言中的一个核心概念,它表示一个变量的地址。通过指针,我们可以间接访问其他变量或数据结构。在声明指针时,需要使用“*&...

c语言指针知识点总结
(1)初学指针使用注意事项 1)指针一定要初始化,否则容易产生野指针(后面会详细说明);2)指针只保存同类型变量的地址,不同类型指针也不要相互赋值;3)只有当两个指针指向同一个数组中的元素时,才能进行指针间的运算和比较操作;4)指针只能进行减法运算,结果为同一个数组中所指元素的下标差值。...

C语言指针的用法
\/\/指针所指向的的类型是int*()[4]在指针的算术运算中,指针所指向的类型有很大的作用。指针的类型(即指针本身的类型)和指针所指向的类型是两个概念。当你对C越来越熟悉时,你会发现,把与指针搅和在一起的"类型"这个概念分成"指针的类型"和"指针所指向的类型"两个概念,是精通指针的关键点之一。...

C语言指针怎么用?
在c语言中.指针被用来表示内存单元的地址,如果把这个地址用一个变量来保存,则 这种变量就称为指针变量。指针变量也分别有不同的类型,用来保存不同类型变量的地址。严格地说.指针与指针变量是不同的,为了叙述方便,常常把指针变量就称为指针。内存是计算机用于存储数据的存储器,以字节作为存储单元....

c语言中的指针是什么?
表示成员选择(指针),选择结构体的成员变量。1、结构:运算符 -> 是指向结构体成员运算符,结合方向为自左向右。2、用法:对象指针->成员名。举例说明如下:

c语言指针用法有哪些
利用指针,我们能进行动态内存管理,通过指针的地址进行数据的存储与访问,极大提高了程序的灵活性和效率。在C语言中,指针操作不仅限于基本数据类型,还可以用于结构体、数组等复杂数据结构的管理,展现出强大的功能。指针的使用涉及到一系列操作,包括指针的声明、初始化、指针运算、指针与数组的关联等。

c语言中指针的应用?
指针的主要用法:1. 间接引用变量。2. 指针作为函数的参数。可以在一个函数中,间接引用另一个函数中的变量。3. 用指针处理数组。4. 用指针处理字符串。指针处理字符串,更加灵活、功能强大。5. 指向函数的指针。这些用法中,最有用的是第2项和第4项。选自《C语言程序设计—从入门到进阶》,人民...

C语言中指针是什么
在C语言中,指针是一种变量,用于存储内存地址。它可以指向其他变量或数据的位置。通过指针,我们可以对内存中的数据进行间接访问和操作。要声明一个指针变量,需要使用特殊的语法来说明变量的类型是指针类型,并使用星号(*)来表示指针。例如,可以声明一个指向整数的指针变量如下:```cint *p; \/\/ 声明...

相似回答