指针 和二维数组

Posted kazoo310

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了指针 和二维数组相关的知识,希望对你有一定的参考价值。

指针

一,传值、引用方式

//()优先级最高

Swap1 引用

  1. void swap(int *a, int *b){  
  2.     int temp;  
  3.     temp = *a;  
  4.     *a = *b;  
  5.     *b = temp;  
  6.     }  

交换成功技术分享图片

 

Swap 2 传值

  1. void swap(int a, int b){  
  2.     int temp;  
  3.     temp = a;  
  4.     a = b;  
  5.     b = temp;  
  6.     }  

     

交换失败 技术分享图片

二,数组与指针的不同 : sizeof(name of array) & sizeof(ptr)

size_t 的类型是unsigned long

  1. printf("\\nsizeof(ptr) is %u\\n"sizeof(ptr));  
  2. printf("sizeof(*ptr) is %u\\n"sizeof(*ptr));  
  3. printf("sizeof(array) is %-ud\\nsizeof(array[0]) is %-ud\\n",sizeof(array),sizeof(array[0]));  
  4. printf("The number of the array is %d"sizeof(array) / sizeof(array[0]));   //可以用来计算数组中元素的个数

技术分享图片

三,指针运算

  1. 指针的加减和比较:只有指向统一数组的指针进行指针算数和比较才有用 否则useless
  2. 只有相同类型的指针才可以赋值。不过void *ptr 除外 ,void *ptr 表示各个指针类型的通用指针

四,用数组或指针实现字符串的复制

 

  1. void copy1(char *a,const char *b) //b字符串复制到a (数组)  
  2. {  
  3.     for (size_t i = 0; (a[i] = b[i]) != ‘\\0‘;i++) 
  4.     {  
  5.         ;  
  6.     }  
  7.     
  8. }  
  9.     
  10. void copy2(char *a, const char *b)//b字符串复制到a (指针)  
  11. {  
  12.     for (; (*a = *b) != ‘\\0‘;a++,b++)  
  13.     {  
  14.         ;  
  15.     }  
  16. }  

结果:

技术分享图片

 

Copy1中的a[i] = b[i] 完成了赋值,然后(a[i] = b[i]) != ‘\\0‘判断是否是字符串的末尾,i++代表数组的下标在每循环一次的时候会加一

同理 copy2中的*a = *b完成了赋值,然后(*a = *b) != ‘\\0‘判断是否是字符串的末尾 因为*a *b最初都代表的是字符串的第一个字符,所以a++,b++代表指针的移动(针对数组这样的移动才有效)

 

一个小坑

copy1 copy2中都是空循环,赋值语句在判断语句已经中完成了,并且都是 (*a = *b) != ‘\\0‘

那我们把这copy2改一下,把判断条件和赋值语句分开写。

我们知道字符串末尾一定是有‘\\0‘

  1. void copy3(char *a, const char *b)  
  2. {  
  3.     for (; *a != ‘\\0‘; a++, b++) //a最后有\\0  
  4.     {  
  5.         *a = *b;  
  6.     }  
  7. }  
  8.     
  9.     
  10. void copy4(char *a, const char *b)  
  11. {  
  12.     for (; *b != ‘\\0‘; a++, b++) //a最后没有\\0  
  13.     {  
  14.         *a = *b;  
  15.     }  
  16. }  

结果:

技术分享图片

所以复制字符串一定要把\\0复制进去,如果没有\\0 会出现以上乱码。

 

 

以上是关于指针 和二维数组的主要内容,如果未能解决你的问题,请参考以下文章

c++二维数组和二级指针

C语言指针指向一维数组与二维数组?

C语言中二维数组名是否可以看作指针数组名?

c语言中如何通过二级指针来操作二维数组

怎么让一个二维指针指向一个二维数组

菜鸟求解用指针求二维数组各个元素和,请大侠帮忙!!!!!谢谢!!!!