第七章 C++/C指针.数组和字符串
2015-04-20 12:13
274 查看
指针本质:CPU访问内存单元时,不论是读取还是写入,首先必须把内存单元的地址加载到地址总线上,同时将内存电路的读写控制设为有效,然后内存单元中的数据就通过数据总线流到了接收寄存器中,或者结果寄存器中的值流向了内存的目标单元中。
提醒:类型名和 '*' 的组合是一种指针类型,但是编译器解释的时候。*是和后面的变量名结合的。
int* a,b,c; a是int型的指针,b和c仍然是int型的变量。
规则1:全局指针变量默认初始值为NULL,对于非静态的局部指针变量P,必须显式的指定其初值,否则P的值是无可预测的。
无论指针变量是全局的还是局部的,静态的或者非静态的,应该在声明的同时初始化它,要么赋予一个有效的地址,要么为NULL。
编译器把指针解释为unsigned int类型数。
规则2:&用于变量,就是在提取变量的地址,不能&&p,因为&p已经不是一个变量了,不能单独使用一个非变量的东西,
规则3:当 * 用于指针时,就是在提取指针所指向的变量,注意不能对void* 的指针取其所指的变量。
数组:以连续字节存放的一片存储区域。一个多维数组在语义上并不等于一个指向其元素类型的指针,相反它等价与一个指向数组的指针。
函数指针
定义一个函数指针数组:
typedef int (*FUNCP])(int) funcptrarr;
提醒:类型名和 '*' 的组合是一种指针类型,但是编译器解释的时候。*是和后面的变量名结合的。
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;
相关文章推荐
- 【C】【笔记】《C和指针》 第六章 指针 第七章 函数 第八章 数组 第九章 字符串、字符和字节
- 用指针存储字符数组表示字符串
- 第12讲指针数组字符串.ppt
- 字符串指针与char型指针数组
- 字符、字符数组(字符串)与指向字符串的指针
- 三十二、数组、指针和字符串:string类
- 用数组存放字符串和用指针存放字符串的区别
- 黑马程序员--02C数组/字符串/指针
- 处理字符串的数组和指针,我居然都忘记了
- 数组、指针和字符串:指向数组元素的指针和指针数组
- 指针、字符串、数组操作
- C指针复制字符串从一个数组到另一个数组
- 字符串指针数组,指向指针的指针
- 字符串、字符数组、字符指针
- C++编程入门系列之二十五(数组、指针和字符串:数组的声明和使用)
- C 字符串数组和char*指针在做&操作时的区别
- 指针_习题:将字符串\"computer\"赋给字符数组,并间隔的输出该串
- 字符串指针与字符数组的区别
- LinuxC简谈之数组、字符串与指针相关的常见错误与问题
- 第七章、函数形参(指针与引用以及传递给函数的数组、vector的操作)