第七章 C++/C指针.数组和字符串

指针本质:CPU访问内存单元时,不论是读取还是写入,首先必须把内存单元的地址加载到地址总线上,同时将内存电路的读写控制设为有效,然后内存单元中的数据就通过数据总线流到了接收寄存器中,或者结果寄存器中的值流向了内存的目标单元中。


提醒:类型名和 '*' 的组合是一种指针类型,但是编译器解释的时候。*是和后面的变量名结合的。

            int* a,b,c; a是int型的指针,b和c仍然是int型的变量。


规则1:全局指针变量默认初始值为NULL,对于非静态的局部指针变量P,必须显式的指定其初值,否则P的值是无可预测的。

             无论指针变量是全局的还是局部的,静态的或者非静态的,应该在声明的同时初始化它,要么赋予一个有效的地址,要么为NULL。


编译器把指针解释为unsigned int类型数。


规则2:&用于变量,就是在提取变量的地址,不能&&p,因为&p已经不是一个变量了,不能单独使用一个非变量的东西,

规则3:当 * 用于指针时,就是在提取指针所指向的变量,注意不能对void* 的指针取其所指的变量。


数组:以连续字节存放的一片存储区域。一个多维数组在语义上并不等于一个指向其元素类型的指针,相反它等价与一个指向数组的指针。


函数指针

  1 #include<stdio.h>
  2 #include<math.h>
  3 double f(double n)
  4 {
  5         return n;
  6         }
  7 
  8 double g(double n)
  9 {
 10 
 11         return 2*n;
 12         }
 13 double k(double n)
 14 {
 15 
 16         return 3*n;
 17         }
 18 int main()
 19 {
 20         double (*funcptr[3])(double)={f,g,k};
 21         int i;
 22         for(i = 0;i < 3;i++)
 23         {
 24                 printf("%lf\n",funcptr[i](64));
 25                 }
 26         
 27         }

定义一个函数指针数组:

 typedef int (*FUNCP])(int)  funcptrarr;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值