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 * >类型的变量 不解 这个类型是表示什么的
⒈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语言有啥用?