C语言指针怎么用,c语言中指针怎么使用?

2021-03-10 21:39:57 字数 6354 阅读 4137

1楼:布秀云钦雨

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

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

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

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

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

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

指针变量定义格式:

[存储类型]

数据类型

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

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

变量的赋值方式:

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

2楼:谌博佟华奥

我是这样理解的:

在c语言中,你需要定义变量

,那么你所定义的这个变量本身你要回理解两层含义答:

(1)变量中的值是多少?有了值我们可以直接拿变量参与运算,eg.

inta=5;在计算的时候a就表示5;

(2)变量存储在内存中的什么位置?变量的存储位置,就是变量的地址,那么这个地址可以用指针来存储,eg.

inta=5,

*p=&a;

在这里p就是指针变量,存储了变量a的地址,这个时候你要是用a变量的值,即可以直接用a,也可以用*p,*p是通过p这个指针(也就是a的地址),间接的找到a,在程序中*p与a是等价的。

3楼:匿名用户

c语言_071_指针的定义和使用_上

c语言中指针怎么使用?

4楼:大野瘦子

1、使用场景

使用指针时,必须将它指向一个变量的地址或者为它分配

空间方能使用,如下所示:

#include

#include

int main(int argc, char const *argv)

;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]=;

int *a=nums;

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

指针的运算

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

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

int nums[5]=;

int *a=nums;

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

int nums[5]=;

int *a=nums;

a=a+2;

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

结果输出2。

5楼:圆随缘灭

1、指针指向变量:

下面有这样一个**块:

int main()

void test(int x,int y)

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

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

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

int main()

void test(int * x,int *y)

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

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

2、指针指向数组:

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

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

int main()

;int *p =array;for(int i=0;i<5;i++)return 0;}

3、指针指向字符串:

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

4、指针指向函数:

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

int sum(int x,int y)

int main()

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

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

5、指针指向结构体:

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

struct student

;再根据类型定义结构体变量struct student stu=;

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

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

6楼:匿名用户

我是这样理解的:

在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是等价的。

7楼:匿名用户

指针是指向地址的,所以你对指针修改也会影响到原地址的值,所以当你需要在函数里修改函数外的变量时可以考虑指针,当然指针还可以连接结构体里的节点之类的,后面还有跟函数有关的,只要多揣摩就会了解了

8楼:欣梦魂

指针可以理解为地址即指向地址的指针,在使用之前要明确三个问题,指针的类型,指针指向的类型,指针指向值的内存区域。通过传递值的地址来传递值

9楼:我是张玉柱

就是地址的地址,之后会学到指针型函数就是函数参数是指针类型的,我们平时学的是int ,float等等,还会学到函数指针就是调用函数的地址。

c语言指针用法?

10楼:匿名用户

内存理解为一间旅馆

变量理解为旅客

指针就是每间客房的号码

你作为旅馆老板,想叫某位客人来吃饭.不用记得他的名字,只要知道他的门牌号就行.

11楼:大野瘦子

1、使用场景

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

#include

#include

int main(int argc, char const *argv)

;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]=;

int *a=nums;

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

指针的运算

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

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

int nums[5]=;

int *a=nums;

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

int nums[5]=;

int *a=nums;

a=a+2;

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

结果输出2。

12楼:tel有你有我

给你你个简单的例子吧 好好体会一下 这个例子比较全#include

void swap(int *p1,int *p2);

main()

void swap(int *p1,int *p2)//指针的交换

13楼:匿名用户

指针就是地址。把握住地址的变换,尤其要把握住头指针,指针如果弄懂了,其实是很简单、很方便的、好好看看书、多实践、加油、、、

14楼:匿名用户

这个确实有点复杂,特别是二维数组,要多编程实践

15楼:姚诗邰书桃

#include

#include

#include

void

sort(char

*a,intn){

inti,j;

char

*temp;

for(i=0;i这样

其中char

*temp;

temp=a[i];

a[i]=a[j];

a[j]=temp;

做了修改

原因如下:未修改前temp是一个字符变量,而*a[i]是指针a[i]所指向的内容,就把需要交换的字符串的首字符交换了。

你要交换的是指针或者说是地址,而不是指针里的内容。这就是问题所在。

在temp前加*就表示temp也是个指针,再把a[i]前的*去掉,就实现了交换指针地址的目的。

指针的声明要加*例如

int*a;

使用的时候如果事指针操作则不要带*例如

char*a=

“hank”;

a++;此时a指向的字符串就变成了“ank”

涉及到指针指向的内容的要加*例如

charb=

*a;指向数组的指针,例如

intb[10];

int*a=b;

a就是b[0]的地址*a就是b[0]的内容a+1就是b[1]的地址依此类推

又如char*a=

"hank";

那么通过a就能得到整个字符串"hank"

*a是h

*(a+1)是a

...strcmp是c语言函数库中的函数

虽然传参传的是指针,但是具体比较的时候比较的是里面的内容。具体涉及到指向数组的指针的应用。因为c中没有string类型,所以就只能使用char类型的指针来表示字符串。

c语言中的指针问题,求解答,C语言中的指针问题,求解答

1楼 匿名用户 好像有点多此一举,直接使用rsnum就可以了。rsnum 就是数组的首地址了。 如果一定要用指针就是要申明一个指针来赋值。 c语言指针问题,求解答 2楼 伤我中国心 1, 是取值运算符,因为你要判断tt的值的情况,所以要用 2,tt 相当于 tt tt 1 这个是指针向后移动,不需要...

C语言的指针有什么实际作用,C语言的实际作用是什么?

1楼 匿名用户 指针实际上就是一个内存地址,比如一个函数指针,就是一个函数的入口地址 ,通过这个地址,系统就可以找到这个函数的位置并调用它。简单地说指针就是指向变量和对象的地址。指针的用途非常广泛,比如如果你想通过函数改变一个变量的值,就得用指针而不能用值传递。 还有在很多时候变量,特别是对象的数据...

c语言中数组名和指针变量的区别,C语言中数组名和指针的区别

1楼 销 数组名除了sizeof会返回数组大小,其他的实况下是相当于一个指针常量无区别的 指针常量也就是说,不能改变数组名的值,比如int a 10 a a a a 10等都是非法的 c语言中数组名和指针的区别 2楼 匿名用户 数组在当作参数传递时,可以当作指针 当然,参数传递相当于赋值操作,所以用...