🚀🚀🚀大家觉不错的话,就恳求大家点点关注,点点小爱心,指点指点🚀🚀🚀
本篇文章,为了提高效率,也为了大家学起来更加方便,我是使用C++的处理方法,如果大家,还没有学习C++,也为大家提供C语言的版本<指针与数组>。
其实我发现指针与数组的难题主要是,二维数组和指针的问题,如果大家理解起来有些困难,主要是大家没有弄懂二维数组的实质,建议大家可以看一下,
大佬总结的二维数组超强解析,看完之后觉对这些题了如指掌!!!
目录
🏡回顾
数组-能够存放一组相同类型的元素。
指针-指针变量
数组是数组,指针就是指针的
数组名就是首元素地址
数组名大部分情况下就是首元素地址
sizaof(数组名),表示整个数组,计算的整个数组的大小
&数组名,取出的是整个数组的地址
🐰一维数组
❤️🔥指针与整形型数组
1. #include<iostream> 2. 3. using namespace std; 4. 5. int main() 6. 7. { 8. 9. int a[]={1,2,3,4}; 10. 11. cout<<sizeof(a)<<endl;//16 12. 13. //sizaof(数组名),表示整个数组,计算的整个数组的大小 14. 15. cout<<sizeof(a+0)<<endl;//4/8 16. 17. //表示计算首元素地址的大小 18. 19. cout<<sizeof(*a)<<endl;//4 20. 21. //a还是首元素的地址,*a就是a[0] 22. 23. cout<<sizeof(a+1)<<endl;//4/8 24. 25. //表示计算第二个元素地址的大小 26. 27. cout<<sizeof(a[1])<<endl;//4 28. 29. cout<<sizeof(&a)<<endl;//4/8 30. 31. //&a-整个数组的地址 32. 33. //int (*p)[4]=&a; 34. 35. cout<<sizeof(*&a)<<endl;//16 36. 37. //相当于sizeof(a) 38. 39. cout<<sizeof(&a+1)<<endl;//16 40. 41. //&a+1跳过一个数组 42. 43. //&a+1还是一个地址 44. 45. cout<<sizeof(&a[0])<<endl;//4/8 46. 47. cout<<sizeof(&a[0]+1)<<endl;//4/8 48. 49. return 0; 50. 51. }
❤️🔥指针与字符型数组
1. #include<iostream> 2. 3. #include<string.h> 4. 5. using namespace std; 6. 7. int main() 8. 9. { 10. 11. char arr[]={'a','b','c','d','e','f'}; 12. 13. cout<<sizeof(arr)<<endl;//6 14. 15. //sizeof计算的内存的大小,单位是字节,不关注内存里放的是什么 16. 17. //sizeof是操作符 18. 19. //strlen是函数,是针对字符串,求字符串的长度,本质计算\0之前的字符 20. 21. cout<<sizeof(arr+0)<<endl;//4/8 22. 23. //arr+0是首元素的地址 24. 25. cout<<sizeof(*arr)<<endl;//1 26. 27. //*arr是首元素,'a' 28. 29. cout<<sizeof(arr[1])<<endl; 30. 31. //计算第二个元素的大小 32. 33. cout<<sizeof(&arr)<<endl;//4/8 34. 35. //整个数组的地址 36. 37. cout<<sizeof(&arr+1)<<endl;//4/8 38. 39. //跳过一个数组的地址 40. 41. cout<<sizeof(&arr[0]+1)<<endl;//4/8 42. 43. //第二个元素的地址 44. 45. cout<<strlen(arr)<<endl;//随机值,不知道亲\0的位置 46. 47. cout<<strlen(arr+0)<<endl;//随机值,不知道亲\0的位置 48. 49. //cout<<strlen(*arr)<<endl;//错误 50. 51. //strlen的原型为size_t strlen ( const char * str );,应该传入地址 52. 53. //cout<<strlen(arr[1])<<endl;//错误,和上面的错误原因相同 54. 55. //cout<<strlen(&arr)<<endl;//随机值 56. 57. cout<<strlen(&arr+1)<<endl;//随机值 58. 59. cout<<strlen(&arr[0]+1)<<endl;//随机值 60. 61. return 0; 62. 63. }
1. #include<iostream> 2. 3. #include<string.h> 4. 5. using namespace std; 6. 7. int main() 8. 9. { 10. 11. char arr[]="abcdef"; 12. 13. cout<<sizeof(arr)<<endl;//7 14. 15. //里面还有一个‘\0’ 16. 17. cout<<sizeof(arr+0)<<endl;//4/8 18. 19. //arr+0是首元素的地址 20. 21. cout<<sizeof(*arr)<<endl;//1 22. 23. //*arr是首元素,'a' 24. 25. cout<<sizeof(arr[1])<<endl;//1 26. 27. //计算第二个元素的大小 28. 29. cout<<sizeof(&arr)<<endl;//4/8 30. 31. //整个数组的地址 32. 33. cout<<sizeof(&arr+1)<<endl;//4/8 34. 35. //跳过一个数组的地址 36. 37. cout<<sizeof(&arr[0]+1)<<endl;//4/8 38. 39. //第二个元素的地址 40. 41. cout<<strlen(arr)<<endl;//6 42. 43. //不计算'\0' 44. 45. cout<<strlen(arr+0)<<endl;//6 46. 47. //cout<<strlen(*arr)<<endl;//错误 48. 49. //strlen的原型为size_t strlen ( const char * str );,应该传入地址 50. 51. //cout<<strlen(arr[1])<<endl;//错误,和上面的错误原因相同 52. 53. //cout<<strlen(&arr)<<endl;//6 54. 55. //cout<<strlen(&arr+1)<<endl;//随机值 56. 57. cout<<strlen(&arr[0]+1)<<endl;//5 58. 59. return 0; 60. 61. }
1. #include<iostream> 2. 3. #include<string.h> 4. 5. using namespace std; 6. 7. int main() 8. 9. { 10. 11. char* p="abcdef"; 12. 13. cout<<sizeof(p)<<endl;//4/8 14. 15. cout<<sizeof(p+1)<<endl;//4/8 16. 17. //第二个元素的地址 18. 19. cout<<sizeof(*p)<<endl;//1 20. 21. cout<<sizeof(p[0])<<endl;//1 22. 23. cout<<sizeof(&p)<<endl;//4/8 24. 25. cout<<sizeof(&p+1)<<endl;//4/8 26. 27. cout<<sizeof(&p[0])<<endl;//4/8 28. 29. cout<<sizeof(&p[0]+1)<<endl;//4/8 30. 31. //第二个元素的地址 32. 33. cout<<strlen(p)<<endl;//6 34. 35. cout<<strlen(p+1)<<endl;//5 36. 37. //cout<<strlen(*p)<<endl;//错误 38. 39. //cout<<strlen(p[0])<<endl;//错误 40. 41. //cout<<strlen(&p)<<endl;//随机值 42. 43. //cout<<strlen(&p+1)<<endl;//随机值 44. 45. //strlen(&p)和strlen(&p+1)没有关系 46. 47. cout<<strlen(&p[0]+1)<<endl;//5 48. 49. return 0; 50. 51. }
🐰二维数组
1. #include<iostream> 2. 3. using namespace std; 4. 5. int main() 6. 7. { 8. 9. int a[3][4]={0}; 10. 11. cout<<sizeof(a)<<endl;//48 12. 13. //二维数组的数组命名单独放在sizeof内部,算的是整个数组的大小 14. 15. cout<<sizeof(a[0][0])<<endl;//4 16. 17. cout<<sizeof(a[0])<<endl;//16 18. 19. //第一行的数组名,计算的数组的大小 20. 21. cout<<sizeof(a[0]+1)<<endl;//4/8 22. 23. //第一行的第二个元素的地址 &a[0][0]+1 24. 25. cout<<sizeof(*(a[0]+1))<<endl;//4 26. 27. //第一行的第二个元素 *(&a[0][0]+1)=a[0][1] 28. 29. cout<<sizeof(a+1)<<endl;//8 30. 31. //a=&a[0] 32. 33. //a[i]=&a[i][0] 34. 35. //a+1就是第二行的地址 &a[0]+1=&a[1] 36. 37. cout<<sizeof(*(a+1))<<endl;//16 38. 39. //*(&a[0]+1)=*(&a[1])=a[1] 40. 41. cout<<sizeof(&a[0]+1)<<endl;//4/8 42. 43. cout<<sizeof(*(&a[0]+1))<<endl;//16 44. 45. //a[1]拿到第二行的元素 46. 47. cout<<sizeof(*a)<<endl;//16 48. //*a=a[1],a[1]是第二行的首元素,sizeof(a[1])算的是第二行整个的大小 49. 50. cout<<sizeof(*a+1)<<endl;//4/8 51. 52. //a[0]+1 53. 54. //&a[0][0]+1=&a[0][1] 55. 56. cout<<sizeof(a[3])<<endl;//16 57. //计算的类型的大小,sizeof是在预处理的时候,就完成计算了,所以在编译的时候,不会计算,预处理的时候,计算a[3]就相当于计算a[i]的类型大小 58. 59. return 0; 60. 61. }
🌸🌸🌸如果大家还有不懂或者建议都可以发在评论区,我们共同探讨,共同学习,共同进步。谢谢大家! 🌸🌸🌸