C++-指针和数组注意事项

一、指针和数组的对比

1、数组的创建方式:静态存储区或者栈。

      数组名 对应 着(而不是指向)一块内存,其地址与容量在生命期内保持不变,只有数组的 内容 可以改变。

2、指针可以随时指向任意类型的内存块,它的特征是“可变”,所以我们常用指针来操作动态内存。

char *p = "littlesea"; //指针指向常量字符串 值是不能改变的

eg.

char *p = “world”; // 注意p 指向常量字符串
p[0] = ‘X’; // 编译器不能发现该错误

但是执行起来是错误的。

 

3、函数里面 数组退化成指针

sizeof() 不是函数 是运算符 所以

int a[10];  
 
int *p = a;  
 
cout<<sizeof(a)<<endl;      //输出40,占40个字节。每个整型4字节  
 
cout<<sizeof(p)<<endl;      //输出4.p是指针,它存储一个地址只占一  
                            //个整型大小,即4字节。   C++/C 语言没有办法知道指针所指的内存容量!


void f( int a[10])  
{  
   cout<<sizeof(a)<<endl;    //此处a退化为指针,输出  
                             //4,而不是40  
}  

/////////////////////////////////////////////////////////////////////////////////////////////////
1、if语句之后绝对不能加;  否则造成不可弥补的损失
2、字符串比较要用strcmp 相等返回 false 要想直接比较 就要创建string类对象
if ( !strcmp(argv[1], "0") )//argv[1] 是字符串类型

if( 4 == atoi(argv[2]) ) //也可以吧argv[2]转化成 int进行比较

string a = argv[1];
string b = "2";
if(a == b)


int
main(int argc, char* argv[])
{
#include <string.h>
using namespace std;
//char szPath[128] = "";
char *szPath = new char[128];
    GetWindowsDirectory(szPath, sizeof(szPath));
 return 0;
}
为什么new char 不行呢?


问题解答:
int
main(int argc, char* argv[])
{
#include <string.h>
 using namespace std;
 //char szPath[128] = "";
 char *szPath = new char[128];
 memset(szPath, 0, 128);//清零还是很有必要的,申请的内存空间的初始化
 //szPath = NULL;       //这样写是极端错误的,相当于改变了szPath 的指向
 GetWindowsDirectory(szPath, 128);//sizeof(szPath)//new 出来的内存注意sizeof(szPath)要改成128了
 cout<<szPath<<endl;
 delete []szPath;
 szPath = NULL;
 return 0;
}

/////////////////////////////////////////////////////////////////////////////////////////////////////
如果你写一个带参数的构造函数,那么在new的时候必须加括号并且传递参数。
class Child:public Parent
{
public:
    Child(int k) {}
    void test(char *f){cout <<"child" <<endl;cout <<f <<endl;}
protected:
private:
};
void main()
    {
            Child *c=new Child(10); //必须加括号并且传递一个参数
            c->test("10");
        getchar();
    }
---------------------
作者:lovemysea
来源:CSDN
原文:https://blog.csdn.net/lovemysea/article/details/5485432
版权声明:本文为博主原创文章,转载请附上博文链接!

posted @ 2019-01-08 13:18  lemaden  阅读(428)  评论(0编辑  收藏  举报