ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
##################指针的一般操作############### int *ip; /* 一个整型的指针 */ double *dp; /* 一个 double 型的指针 */ float *fp; /* 一个浮点型的指针 */ char *ch; /* 一个字符型的指针 */ 所有指针的值的实际数据类型,不管是整型、浮点型、字符型,还是其他的数据类型,都是一样的,都是一个代表内存地址的长的十六进制数。不同数据类型的指针之间唯一的不同是,指针所指向的变量或常量的数据类型不同。 #include <iostream> using namespace std; int main(){ int p[] = {1,2,3,4,5}; int i = 101; int *poi1,*poi2; cout << &p << endl; cout << &i << endl; poi1 = p; poi2 = &i; cout << poi1 << endl; cout << *poi1 << endl;//默认是数组第一个元素地址 cout << *poi2 << endl; cout << poi2 << endl; } ###############空指针#################### 在大多数的操作系统上,程序不允许访问地址为 0 的内存,因为该内存是操作系统保留的。然而,内存地址 0 有特别重要的意义,它表明该指针不指向一个可访问的内存位置。但按照惯例,如果指针包含空值(零值),则假定它不指向任何东西。 如需检查一个空指针,您可以使用 if 语句,如下所示: if(ptr) /* 如果 ptr 非空,则完成 */ if(!ptr) /* 如果 ptr 为空,则完成 */ #include <iostream> using namespace std; int main(){ int *p = NULL; cout << p; return 0; } ################指针的算术运算############## 指针是一个用数值表示的地址。因此,您可以对指针执行算术运算。可以对指针进行四种算术运算:++、--、+、-。 假设 ptr 是一个指向地址 1000 的整型指针,是一个 32 位的整数,让我们对该指针执行下列的算术运算: ptr++ 在执行完上述的运算之后,ptr 将指向位置 1004,因为 ptr 每增加一次,它都将指向下一个整数位置,即当前位置往后移 4 个字节。这个运算会在不影响内存位置中实际值的情况下,移动指针到下一个内存位置。如果 ptr 指向一个地址为 1000 的字符,上面的运算会导致指针指向位置 1001,因为下一个字符位置是在 1001。 #include <iostream> using namespace std; int main(){ int *p; int arr[] = {22,33,44}; p = arr; for(int i=0;i<3;i++){ cout << i << '-' << p << endl; cout << i << '-' << *p << endl; p++; //数组是常量指针 do not arr++ } } #include <iostream> using namespace std; const int MAX = 3; int main(){ int *p; int arr[] = {22,33,44}; p = &arr[MAX-1]; for(int i=0;i<MAX;i++){ cout << i << '-' << p << endl; cout << i << '-' << *p << endl; p--; //数组是常量指针 do not arr++ } } #include <iostream> using namespace std; const int MAX = 3; int main () { int var[MAX] = {10, 100, 200}; for (int i = 0; i < MAX; i++) { *var = i; // 这是正确的语法 var++; // 这是不正确的 } return 0; } 把指针运算符 * 应用到 var 上是完全可以的,但修改 var 的值是非法的。这是因为 var 是一个指向数组开头的常量,不能作为左值。 由于一个数组名对应一个指针常量,只要不改变数组的值,仍然可以用指针形式的表达式。例如,下面是一个有效的语句,把 var[2] 赋值为 500: *(var + 2) = 500; 上面的语句是有效的,且能成功编译,因为 var 未改变。 您也可以用一个指向字符的指针数组来存储一个字符串列表,如下: 实例 #include <iostream> using namespace std; const int MAX = 4; int main () { const char *names[MAX] = { "Zara Ali", "Hina Ali", "Nuha Ali", "Sara Ali", }; for (int i = 0; i < MAX; i++) { cout << "Value of names[" << i << "] = "; cout << names[i] << endl; } return 0; } 当上面的代码被编译和执行时,它会产生下列结果: Value of names[0] = Zara Ali Value of names[1] = Hina Ali Value of names[2] = Nuha Ali Value of names[3] = Sara Ali