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

本文详细介绍了数组的定义与初始化方法,并对比了不同赋值方式的适用场景。同时,深入探讨了指针的多种用途及注意事项,包括初始化、内存分配与释放等关键操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

建立一个数组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 *'

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值