9.2 变量的指针和指向变量的指针变量 |
变量的指针就是变量的地址。可以定义一个指向一个变量的指针变量。为了表示批针变量和它所指向的变量之间的联系,用"*"符号表示"指向",可以看到,*i-pointer也是代表一个变量,它与变量i是同一回事。下面两个语句作用相同: 1:1i=3; 2:2*i-pointer=3; 第2个语句的含意是:将3赋给指针变量i-pointer所指向的变量。 C语言规定所有变量在使用前必须定义,规定其类型。指针变量不同于整型变量和其它类型的变量,它是用来专门存放地址的。必须将它定义为"指针类型"。 在定义指针变量时要注意两点: (1)标识符前面的"*",表示该变量为指针变量。 (2)一个指针变量只能指向同一个类型的变量。 请牢记,指针变量中只能存放地址(指针),不要将一个整型量(或任何其它非地址类型的数据)赋给一个指针变量。 例9.1 main( ) {int a,b; int * pointe r-1,* pointer-2; a=100;b=10; pointer-1=&a; pointer-2=&b; printf(″℅,d℅d\n″,a,b); printf(″℅,d℅d\n″,* pointe r-1,* pointer-2); } 运行结果为: 100,10 100,10 对程序的说明: 1、在开头处虽然定义开头处虽然定义了两个指针变量pointer-1和pointer-2,但它们并未指向任何一个整型变量。 2、最后一行的*pointer-1和*pointer-2,就是变量a和b。 3、程序中有两处出现*pointer-1和*pointer-2,请区分它们的不同含意。 4、第5、6行"pointer-1=&a;"和"pointer-2=&b;"是将a和b的地址分别赋给pointer-1,和pointer-2。 下面对"&"和"*"运算符再做些说明: 1、如果已执行了"pointer-1=&a;"语句,若有&*pointer-1 它的含意是什么?"&"和"*"两个运行符的优先级别相同,但按自右而左方向结合,因此先进行*pointer-1与&a相同。 如果有 pointer-2=&*pointer-1; 它的作用是将&a(a的地址)赋给pointe-2,如果pointer-2原来指向b,现在已不再指向b而也指向a了。 2、*&a的含意是什么?先进行&a运算,得a的地址,再进行*运算。 3、(*pointer-1)++相当于a++。 函数的参数不仅可以是整型、实型、字符型等数据,还可以是指针类型。它的作用是将一个变量的地址传送到另一个函数中。 为了使在函数中改变了的变量值能被main函数所用,不能采取上述把要改变值的变量作为参数的办法,而应该用指针变量作为函数,在函数过程中使指针变量所指向的变量值发生变化,函数调用结束后,这些变量值的变化依然保留下来,这样就实现了"调用函数改变变量的值,在主调函数(如main函数)中使用这些改变了的值"的目的。 如果想通过函数调用得到n个要改变的值,可以:○1在主调函数中设n个变量,用n个指针变量指向它们;○2然后将指针变量作实参,将这n个变量的址传给所调用的函数的形参;○3通过形参指针变量,改为该n个变量的值;○4主调函数中就呆以使用这些改变了值的变量。 |
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论