您的位置:

c语言指针方式,c语言 指针的指针 用法详解

本文目录一览:

如何正确地使用C语言的指针

指针是C语言中的精髓,它能直接对物理地址进行访问,具有双重功能,是嵌入式设计中必不可少的一门语言。C语言功能强大的主要原因就是具有指针结构。指针是一种特殊的数据类型,直接指向目标的存储地址,实现直接访问对象存储空间的功能。

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;i5;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语言中只能用来指向结构体。

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

C语言指针怎么用?

在c语言中.指针被用来表示内存单元的地址,如果把这个地址用一个变量来保存,则

这种变量就称为指针变量。指针变量也分别有不同的类型,用来保存不同类型变量的地址。

严格地说.指针与指针变量是不同的,为了叙述方便,常常把指针变量就称为指针。

内存是计算机用于存储数据的存储器,以字节作为存储单元.为了能正确的访问内存单

元,必须为每一个内存单元编号,这个编号就称为该单元的地址。如果将一个旅店比喻成内

存,则旅店的房间就是内存单元,房间号码就是该单元的地址。

指针变量定义格式:

[存储类型]

数据类型

*指针变量名[=初始值]

指针变量一旦定义,必须采用赋值的方式将其与某个变量实体相联系,才能使用。指针

变量的赋值方式:

指针变量名;&普通变量名;

C语言 指针方法?

#includestdio.h

int main()

{

int a,b,c,s[3],t;

int *x,*y,*z;//定义指针变量

x=a;//将a的地址赋给指针x,下同

y=b;

z=c;

scanf("%d%d%d",x,y,z);

s[0]=*x;//将指针x所指向的变量值赋给数组s的第一个元素;依次类推

s[1]=*y;

s[2]=*z;

for(int i=0;i3;i++)//冒泡排序

for(int j=0;j3-i-1;j++)

if(s[j]s[j+1])

{

t=s[j];

s[j]=s[j+1];

s[j+1]=t;

}

for(int i=0;i3;i++)

printf("%d ",s[i]);

return 0;

}

——————————————————————————

#includestdio.h

void input(int *a)

{

int *p=a;//将数组a的首地址赋给指针p

for(int i=0;i10;i++)

scanf("%d",p[i]);//指针下标法输入

}

int max_min(int *a)

{

int *p=a;//将数组a的首地址赋给指针p

int max,min,x=0,y=0,t;

max=min=p[0];

for(int i=0;i10;i++)

{

if(p[i]=max)

{

max=p[i];

x=i;

}

if(p[i]=min)

{

min=p[i];

y=i;

}

}

t=p[y];

p[y]=p[0];

p[0]=t;

t=p[9];

p[9]=p[x];

p[x]=t;

}

void output(int *a)

{

int *p=a;//将数组a的首地址赋给指针p

for(int i=0;i10;i++)

printf("%d ",p[i]);//指针下标法输出

}

int main()

{

int a[11];

input(a);//调用函数,下同

max_min(a);

output(a);

return 0;

}

C语言指针的用法

1、指针的概念

指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。要搞清一个指针需要搞清指针的四方面的内容:指针的类型,指针所指向的类型,指针的值或者叫指针所指向的内存区,还有指针本身所占据的内存区。让我们分别说明。

先声明几个指针放着做例子:

例一:

(1)int*ptr;

(2)char*ptr;

(3)int**ptr;

(4)int(*ptr)[3];

(5)int*(*ptr)[4];

1、指针的类型

从语法的角度看,你只要把指针声明语句里的指针名字去掉,剩下的部分就是这个指针的类型。这是指针本身所具有的类型。让我们看看例一中各个指针的类型:

(1)int*ptr;

//指针的类型是int*

(2)char*ptr;

//指针的类型是char*

(3)int**ptr;

//指针的类型是int**

(4)int(*ptr)[3];

//指针的类型是int(*)[3]

(5)int*(*ptr)[4];

//指针的类型是int*(*)[4]

怎么样?找出指针的类型的方法是不是很简单?

2、指针所指向的类型

当你通过指针来访问指针所指向的内存区时,指针所指向的类型决定了编译器将把那片内存区里的内容当做什么来看待。

从语法上看,你只须把指针声明语句中的指针名字和名字左边的指针声明符*去掉,剩下的就是指针所指向的类型。例如:

(1)int*ptr;

//指针所指向的类型是int

(2)char*ptr;

//指针所指向的的类型是char

(3)int**ptr;

//指针所指向的的类型是int*

(4)int(*ptr)[3];

//指针所指向的的类型是int()[3]

(5)int*(*ptr)[4];

//指针所指向的的类型是int*()[4]

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

本篇文章来源于 黑基网-中国最大的网络安全站点 原文链接:

c语言指针用法?

1、使用场景

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

#includestdio.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。

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