收集一些C/C++的平时自己不怎么注意的细节东西(内容持续更新。。。)
1.以下C程序输出的内容是什么?- #include <stdio.h>
- #include <string.h>
- int main()
- {
- char s[] = "abc" ;
- char x[3][4] ;
- int i , j ;
- for ( i = 0 ; i < 3 ; i++ )
- strcpy( x[i] , s ) ;//把从src地址开始且含有NULL结束符的字符串复制到以dest开始地址
- for ( i = 0 ; i < 3 ; i++ )
- for ( j = 0 ; j < 3 ; j++ )
- printf( "%s" , &x[i][j] ) ;
- return 0 ;
- }
printf中'%s'是输出字符串 , &x[i][j] 是代表在数组x中的首地址为&x[i]+j*sizeof(j) 以上运行结果为:
2.argc,argv的含义:
UNIX和Linux中的标准写法为: main(int argc, char *argv[ ], char *env[ ])
argc: 整数,用来统计你运行程序时发送给main函数的命令行参数的个数
argv: 字符串数组,用来存放指向你的字符串参数的指针数组,每一个元素指向一个参数
3.C++复制控制:
当类的成员存在指针式需要自己实现复制控制成员(复制够着函数,复制操作符和析构函数)。
一个简单的带指针成员char *m_data的 String类实现如下:
- #include <iostream>
- #include <cstring>
- using namespace std ;;
- class String
- {
- friend ostream& operator << ( ostream &os , const String &s)
- {
- os << s.m_data << endl ;
- return os ;
- }
- public :
- String( const char *str) ;
- String( const String &rhs ) ;
- ~String() ;
- String& operator = ( const String &rhs ) ;
- private :
- char *m_data ;
- } ;
- String::String( const char *str ) //定义一般的构造函数
- {
- if ( str == NULL )
- {
- m_data = new char[1] ;
- m_data[0] = '\0' ;
- }
- else
- {
- m_data = new char[strlen(str)+1] ;
- strcpy( m_data , str ) ;
- }
- }
- String::String( const String &rhs ) //定义复制构造函数
- {
- m_data = new char[ strlen(rhs.m_data) + 1 ] ;
- strcpy( m_data , rhs.m_data ) ;
- }
- String& String::operator = ( const String &rhs ) // 定义重载的赋值操作符
- {
- if ( this == &rhs )
- return *this ;
- delete []m_data ;
- m_data = new char[strlen(rhs.m_data)+1] ;
- strcpy( m_data , rhs.m_data) ;
- return *this ;
- }
- String::~String()
- {
- delete []m_data ;
- }
- int main()
- {
- String s1 = String("Hello") ;
- String s2 = s1 ;
- cout << s1 << s2 ;
- return 0 ;
- }
阅读(605) | 评论(0) | 转发(0) |