Chinaunix首页 | 论坛 | 博客
  • 博客访问: 55649
  • 博文数量: 16
  • 博客积分: 306
  • 博客等级: 二等列兵
  • 技术积分: 162
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-20 15:08
文章分类

全部博文(16)

文章存档

2013年(1)

2012年(15)

我的朋友

分类: C/C++

2012-10-30 10:54:34

收集一些C/C++的平时自己不怎么注意的细节东西(内容持续更新。。。)

1.以下C程序输出的内容是什么?

点击(此处)折叠或打开

  1. #include <stdio.h>
  2. #include <string.h>

  3. int main()
  4. {
  5.     char s[] = "abc" ;
  6.     char x[3][4] ;

  7.     int i , j ;
  8.     for ( i = 0 ; i < 3 ; i++ )
  9.         strcpy( x[i] , s ) ;//把从src地址开始且含有NULL结束符的字符串复制到以dest开始地址

  10.     for ( i = 0 ; i < 3 ; i++ )
  11.     for ( j = 0 ; j < 3 ; j++ )
  12.         printf( "%s" , &x[i][j] ) ;  

  13.     return 0 ;
  14. }
printf中'%s'是输出字符串 , &x[i][j] 是代表在数组x中的首地址为&x[i]+j*sizeof(j)
以上运行结果为:

点击(此处)折叠或打开

  1. abcbccabcbccabcbcc


2.argc,argv的含义:
UNIX和Linux中的标准写法为: main(int argc, char *argv[ ], char *env[ ])
argc: 整数,用来统计你运行程序时发送给main函数的命令行参数的个数
argv: 字符串数组,用来存放指向你的字符串参数的指针数组,每一个元素指向一个参数 

3.C++复制控制:
当类的成员存在指针式需要自己实现复制控制成员(复制够着函数,复制操作符和析构函数)。
一个简单的带指针成员char *m_data的 String类实现如下:

点击(此处)折叠或打开

  1. #include <iostream>
  2. #include <cstring>
  3. using namespace std ;;

  4. class String
  5. {
  6.     friend ostream& operator << ( ostream &os , const String &s)
  7.     {
  8.         os << s.m_data << endl ;
  9.         return os ;
  10.     }
  11.     public :
  12.         String( const char *str) ;
  13.         String( const String &rhs ) ;
  14.         ~String() ;
  15.         String& operator = ( const String &rhs ) ;
  16.     private :
  17.         char *m_data ;
  18. } ;

  19. String::String( const char *str ) //定义一般的构造函数
  20. {
  21.     if ( str == NULL )
  22.     {
  23.         m_data = new char[1] ;
  24.         m_data[0] = '\0' ;
  25.     }
  26.     else
  27.     {
  28.         m_data = new char[strlen(str)+1] ;
  29.         strcpy( m_data , str ) ;
  30.     }
  31. }

  32. String::String( const String &rhs ) //定义复制构造函数
  33. {
  34.     m_data = new char[ strlen(rhs.m_data) + 1 ] ;
  35.     strcpy( m_data , rhs.m_data ) ;
  36. }

  37. String& String::operator = ( const String &rhs ) // 定义重载的赋值操作符
  38. {
  39.     if ( this == &rhs )
  40.         return *this ;
  41.     delete []m_data ;
  42.     m_data = new char[strlen(rhs.m_data)+1] ;
  43.     strcpy( m_data , rhs.m_data) ;
  44.     return *this ;
  45. }

  46. String::~String()
  47. {
  48.     delete []m_data ;
  49. }

  50. int main()
  51. {
  52.     String s1 = String("Hello") ;
  53.     String s2 = s1 ;
  54.     cout << s1 << s2 ;
  55.     return 0 ;
  56. }


阅读(570) | 评论(0) | 转发(0) |
0

上一篇:python之os.waitpid()

下一篇:链表(C++实现)

给主人留下些什么吧!~~