仍然是数组和指针的初始化,以及string类型的赋初始值

来源:互联网 发布:火绒安全软件 下载 编辑:程序博客网 时间:2024/05/19 13:43

数组很简单,直接定义然后使用就是了:

建立一个数组a[],如int a[20]=“adf”;如果只建立也就是只声明而不赋值,那要之后赋值就要给出一个循环,一个个的给值,

 char d[20];
 for  (i=0;i<20;i++  )
 d[i]=“要给的”; 

但是不可以再直接这么了:a[20]=“adf”;

但是如果想一步到位的给a数组赋值那要怎么办呢?用strcpy或者strncpy了,strcpy(s,“asdfasef”);

那么指针呢?

指针始终要记住一点就是,不可以给没有初始化的指针赋值,因为没有初始化的指针的地址是不定的,或许就是用的程序的地址,data和code地址空间冲突很恐怖的。

那就初始化撒。

指针友很多类型,这个跟声明有关,比如整型,char型,还有结构体型的等等,都是一样的定义,这里就拿int和char型的来试试:

    int  *q;
     *q=1345;
    printf("%d/n",q);

这样就要不得的

    int  *q;

 q=(int *)malloc(sizeof(int));

     *q=1345;
    printf("%d/n",*q);

初始化后,这样就可以。

对char型的,一来可以个给数组地址

 char *w;
 char s[20]="dddddddd";
 w=s;

要么分配一个地址再赋值,不过char的赋值不是像int型的一样*q=1345;而是不带星号的赋值:

 char *w;
 w=(char *)malloc(20);
 w="asdddddd";
 printf("s=%s",w);

当然了也可以用strcpy来做,但是指针依然要初始化的,这样是不可以的,

 char *w;
 // w=(char *)malloc(20);
 strcpy(w,"asdfasdf");
 printf("s=%s",w);

要给地址的才可以,就是w=(char *)malloc(20);要用上。

malloc之后要free,分配地址其实也可以用new这个是c++里面的东西。就不写了。

还有一种就是string类型的赋值了,只要是给地址就可以的,比如:

char a[20]="aaaaaaaaaa";

string ss;

ss=a;

这个是通过数组地址赋值,也可以用指针:

char *a="aaaaaaaaaa";

string ss;

ss=a;

 但是还有一种赋值,就是用string类型的地址给指针或者数组赋值,这样是不可以的,起码再vc里面,比如:

  char *p;
  char a[20];
  string ss="asdfasdf";
  a=ss;//不可以的
  p=ss;//也不可以的
  cout<<p<<endl;
  cout <<a<<endl;

错误原因:

D:/hehe/hehe/cpp1/cout.cpp(15) : error C2679: binary '=' : no operator defined which takes a right-hand operand of type 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >' (or there is no acceptable conversion)

 用strcpy(a,ss)或者strcpy(p,ss)也是不可以的。

错误原因:

D:/hehe/hehe/cpp1/cout.cpp(15) : error C2664: 'strcpy' : cannot convert parameter 2 from 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >' to 'const char *'

 

原创粉丝点击