第五章 指针 数组 和 结构
1 指针:
int *a[32] 一个数组,它包含32个到int的指针
int (*f) (char *) 到函数的指针,这种函数以char*为参数,返回int
int *f(char *) 一个以char *为参数的函数,返回一个到int的指针
2 零:
0是一个整数,当表示一个空指针时,最好用*P=0;若要用null,则最好用 const int null=0来定义null;
3 数组:
在定义数组时,数组的大小必须设定,如:
int v[3];
若要定义一个可变的数组则可以用:
vector<int>v(i) //i可变
4 字符串文字量:
字符串的类型是“适当个数的const字符的数组”,所以“bohr”的类型就是const char[5],所以下列程序就会发生错误:
void f()
{
char *p=”plato”;
p[4]=’e’; //错误,给常量赋值
}
若我们希望字符串被更改,则可把字符串复制到一个数组中:
void f()
{
char p[]=plato”; //拷贝到数组p里
p[4]=’e’;
}
由于字符串是静态分配的,所以让函数来返回它是安全的:
const char * error_msg(int i) // 定义一个返回常量字符指针的函数
{
///………………….
return “error”;
}
4 引用:
我们可以通过引用来描述一个函数的参数,以使该函数能够改变传递来的变量的值,如:
void incr (int & a){a++;}
void f()
{
int x=1;
incr(x); ///x=2
}
但是我们必须尽量避免使用引用,而应该通过返回值或明确要求一个指针参数:
void incr(int *p) {(*p)++;}
void f()
{
int x=1;
incr(&x); ////////x=2
}
5 指针和常量
指向常量的指针和指针常量的区别:
(主要看 *和谁离得比较近)即:
char const *pc
均表示pc所指得那个数为常量,不可更改但pc可以被更改。
const char *pc
char *const *pc 表示pc不能被更改,是常量,而pc所指得数可以被更改。
作用:
用const char *p 作为函数的参数有效杜绝了函数更改p所指的内容,使p所指的内容只能被读取。
注意:
我们不能用一个常量给一个非指向的常量的指针赋值: 如:
const int a=3;
int *p=&a; //// 错误!!!应该使用 const int *p=&a;