动态内存分配,没有指针是无法执行的。所以,想要成为一名优秀的 C++ 程序员,学习指针是很有必要的。
指针是一个变量,其值为另一个变量的地址,即,内存位置的直接地址。
楼上所说指针本质是变量,可能会对初学者造成误解。指针p本身是有值的,值可能是8字节(64位)或者4字节(32位),跟着系统和编译器来判断。
指针p所指向变量num(操作*p)的值为110
- 这里,参考运算符一节,是一种运算方式。不要把 *p 看做指针。
另外,下面这篇文章提供了指针的注意规则和与常量的关系!!!与常量的关系!!!
C++ 中常量引用、指向常量的指针、常量指针的区别
& 符号的意思是取地址,也就是返回一个对象在内存中的地址。
- 符号的意思是取得一个指针所指向的对象。 也就是如果一个指针保存着一个内存地址,那么它就返回在那个地址的对象。
简单点就是:&:取址。* :取值。
字符数组除了可以用花括号在定义时初始化外,还可以用字符串字面值初始化,但谨记字符串字面值包含一个额外的空字符1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16char c1[] = {'h','e','l','l','o'};
char c2[] = "hello";
cout<<sizeof(c1)/sizeof(char)<<endl; //长度是5
cout<<sizeof(c2)/sizeof(char)<<endl; //长度是6
一个数组不能用另一个数组初始化,也不能将一个数组赋值给另一个数组
int a[3] = {1,2,3};
int b[3][3] = {{1,2,3},{1,2,3},{1,2,3}}; //right
int c[3][3] = {a,a,a}; //error
若指针保存0值,表明它不指向任何对象。但是把int型变量赋值给指针是非法的,尽管此int型变量的值可能为0
int a = 0;
int *p1 = 0; //right
int *p2 = a; //error
typedef string *pstring;
const pstring cstr;
cstr的类型是 string const 还是 const string ?
答:是string const cstr,而非 const string cstr。容易产生误解的原因是const限定符既可以放在类型前也可以放在类型后,const pstring cstr等价于pstring const cstr。遇到此类问题时,把const放在类型之后来理解。区分:int ip[4] 和 int (ip)[4]第一个表示一个数组,元素是int指针第二个表示一个指针,指向int数组,遇到此类问题时,由内向外读。
可以对指针进行四种算术运算:++、–、+、-
指针和数组的联系
#