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
版权声明:本文为博主原创文章,转载请附上博文链接!