数组很简单,直接定义然后使用就是了:
建立一个数组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 *'