C语言—指针操作

作者:追风剑情 发布于:2019-10-9 20:27 分类:C

指针操作:

  1. 赋值:可以把地址赋给指针。
  2. 解引用:*运算符给出指针指向地址上储存的值。
  3. 取址:和所有变量一样,指针变量也有自己的地址和值。
  4. 指针与整数相加:可以使用+运算符把指针与整数相加,或整数与指针相加。
  5. 指针与整数相减:可以使用-运算符从一个指针减去一个整数。
  6. 递增指针:如,ptr++
  7. 递减指针:如,ptr--
  8. 指针求差:可以计算两个指针的差值。通常,求差的两个指针分别指向同一个数组的不同元素,通过计算求出两元素之间的距离。
  9. 比较:使用关系运算符可以比较两个指针的值,前提是两年指针都指向相同的类型对象。

C只能保证指向数组任意元素的指针和指向数组后面第1个位置的指针有效

千万不要解引用未初始化的指针,例如:double *pd; *pd = 2.4; //错误,pd未初始化。可以用一个变量或者malloc()来初始化指针(让指针指向一个正确的内存地址)。

示例

  1. //Visual Studio中加上这句才可以使用scanf()
  2. //否则只能使用scanf_s()
  3. #define _CRT_SECURE_NO_WARNINGS
  4. #include <stdio.h>
  5. #include <stdbool.h>
  6.  
  7. //argc: 参数个数 argv[]: 参数数组
  8. int main(int argc, char *argv[])
  9. {
  10. int urn[5] = {100,200,300,400,500};
  11. int *ptr1, *ptr2, *ptr3;
  12.  
  13. ptr1 = urn; // 把一个地址赋给指针
  14. ptr2 = &urn[2]; // 把一个地址赋给指针
  15. // 解引用指针,以及获得指针的地址
  16. printf("pointer value, dereferenced pointer, pointer address:\n");
  17. // %p用来打印地址
  18. // 如果编译器不支持%p,可用%u或%lu代替。
  19. // 如果编译器不支持%td打印地址的差值,可用%d或%ld代替。
  20. printf("ptr1=%p, *ptr1=%d, &ptr1=%p\n", ptr1, *ptr1, &ptr1);
  21.  
  22. // 指针加法
  23. ptr3 = ptr1 + 4;
  24. printf("\nadding an int to a pointer:\n");
  25. printf("ptr1 + 4 = %p, *(ptr1 + 4) = %d\n", ptr1 + 4, *(ptr1 + 4));
  26. ptr1++; //递增指针
  27. printf("\nvalues after ptr1++:\n");
  28. printf("ptr1=%p, *ptr1=%d, &ptr1=%p\n", ptr1, *ptr1, &ptr1);
  29. ptr2--; //递减指针
  30. printf("\nvalues after --ptr2:\n");
  31. printf("ptr2=%p, *ptr2=%d, &ptr2=%p\n", ptr2, *ptr2, &ptr2);
  32. --ptr1; //恢复为初始值
  33. ++ptr2; //恢复为初始值
  34. printf("\nPointers reset to original values:\n");
  35. printf("ptr1=%p, ptr2=%p\n", ptr1, ptr2);
  36.  
  37. // 一个指针减去另一个指针
  38. printf("\nsubtracting one pointer from another:\n");
  39. printf("ptr2=%p, ptr1=%p, ptr2 - ptr1 = %td\n", ptr2, ptr1, ptr2-ptr1);
  40.  
  41. // 一个指针减去一个整数
  42. printf("\nsubtracting an int from a pointer:\n");
  43. printf("ptr3=%p, ptr3-2=%p\n", ptr3, ptr3-2);
  44.  
  45. system("pause");
  46. return 0;
  47. }

运行测试
1111.png

标签: C语言

Powered by emlog  蜀ICP备18021003号-1   sitemap

川公网安备 51019002001593号