码迷,mamicode.com
首页 > 编程语言 > 详细

指针 和二维数组

时间:2018-01-01 17:08:00      阅读:186      评论:0      收藏:0      [点我收藏+]

标签:移动   color   sea   str   循环   字符   less   ack   copy   

指针

一,传值、引用方式

//()优先级最高

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 会出现以上乱码。

 

 

指针 和二维数组

标签:移动   color   sea   str   循环   字符   less   ack   copy   

原文地址:https://www.cnblogs.com/kazoo310/p/8167638.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!