当前位置:编程学习 > C/C++ >>

c语言指针地址的全部表示方法

⒈f为例     &f

                 *f

还有什么是表示指针地址的方法

         

⒉为什么

fread(f,4,2,fp);和fread(&stud[i],sizeof(struct studer_type),1,fp);

fread(buffer,size,count,fp);

第一项为什么又放地址了又放指针

(原文c程序设计第二版318页)

追问:<float * >类型的变量 不解 这个类型是表示什么的
答案:朋友那本书对指针还真的没解释多少.

请看下面这个例子,看了你也应该会明白了

float f = 1.1;  // 定义一个<float>型的变量f,f的值为1.1;

float* p = &f; // 定义一个<float * >类型的变量 p,值为&f(也就是变量f的在内存中的地址). 注意:指针也是一个变量,只是指针有点特殊,因为它只存储地址,(简单的说,指针就是一个用来存放地址的变量,)如果不懂,就继续追问.这一步你必须清楚了.

*p = 3.3;      // 将3.3的值付给p指向的变量.(*操作符又称作为间接值(indirect value) 或者解除引用(dereferencing)操作符.)

float * p2 = p; // 定义一个指针p2让p2指向变量f.(请记住p就是一个存放地址的变量,就像普通变量一样,这条语句就是将p中存放的地址赋给p2);

*p2 = *p;     //  先取p指向的变量(解除引用),再取p2指向的变量(解除引用),最后将p指向的变量付给p2指向的变量,(其实这里没有任何意义,因为他们都指向变量f.这条语句相当于 f = f;)

float** temp = &p; //如果对&p取地址,那么就应该用一个二级指针(**)来指向它,不然就没有任何意义.

 

(个人认为)指针的主要用途还是体现在传递大的数据类型方面(还有一点就是他可以通过地址(指针),来改变变量的值).例如,

一个很大的数组,或者一个很大的结构体,

int value1[1000];

typedef struct {

  int value2;

  float value3;

  char value4[100];

  ........

} test

 

test astTest[50];

千万不要以为这只是特殊的时候.其实这类复合型的数据是很常见的.

 

当某个函数需要调用他们时,如果直接传值调用的话...

int function( int value1[1000], test astTest[50] );

光是将原参数的值赋给函数的参数,就会浪费很多的内存,如果一个工程全是这样的函数,那么...很难想象.

而且value1 和 astTestt的值还不会因为这个函数而改变..(不信可以试试,想要改变的话,还得将数组或作为返回值传递回来.).

 

但是如果用指针作为参数的话..

int function2( int * value, test * astTest );

这样就什么问题都OK了.

慢慢体会一下...

 

 

 

&f表示变量f的存放地址,*f表示定义f是指针变量,而f的值是个地址。也就等于前面的&f,所以那个读文件的函数中,第一个放的是地址,先定义*f,所以把f方在那里是可以的,因为此时f值是一地址

上一个:C语言和易语言是什么东西
下一个:到底学C语言有啥用?

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,