C++c 静态变量赋值如何赋值字母?

收藏,733 浏览
问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
string str1="010";
string str2="111";
string str3="101";
char a[4]="010";
char b[4]=str1;
char s[3][4];
//想要达到同样的效果还有别的赋值或者操作方式吗?
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
C++区分赋值和初始化,字符数组可以用字面值初始化,也可以用花括号来初始化,其他的不行。而且不能够对数组直接赋值。在保证字符数组大小足够的情况下,可以用strcpy(b,str1.c_str());。
同步到新浪微博
不要错过该问题的后续解决方案
如果你没找到答案,记得登录关注哦,大家会尽全力帮你解决的 ^___^
分享到微博?
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
举报理由:
推广(招聘、广告、SEO 等)方面的内容
带有人身攻击、辱骂、仇恨等违反条款的内容
与已有问题重复(请编辑该提问指向已有相同问题)
内容质量差,或不适合在本网站出现
答非所问,不符合答题要求
其他原因(请补充说明)
补充说明:字符串为啥只能在定义时赋值,或者用strcpy进行赋值_C++大全_优良自学吧 |
当前位置: >
> 字符串为啥只能在定义时赋值,或者用strcpy进行赋值优良自学吧提供字符串为啥只能在定义时赋值,或者用strcpy进行赋值,字符串为什么只能在定义时赋值,或者用strcpy进行赋值最近在研究c++,看了点东西,做了些例子,可是我发现了一个相当不能理解的问题 第一段: char&name[20]; name&=&"";//这行代码编译通不过,报&&In字符串为什么只能在定义时赋值,或者用strcpy进行赋值最近在研究c++,看了点东西,做了些例子,可是我发现了一个相当不能理解的问题
char&name[20];
name&=&"";//这行代码编译通不过,报&&IntelliSense:&表达式必须是可修改的左值
strcpy(name,"");&//很可笑的是,这行代码又是正确的,凭什么这个库函数可以,而操作符=不可以
char&name[20]=&"";//我很奇怪,这一行与&第一段中的第一行+第二行有什么区别
可能是我本来是java程序员,一过来看c,c++的,感觉太过匪夷所思
这样的语法感觉太不正常了
这编译器为什么不让给char类型数组赋值呢?
求各位朋友解惑啊
------解决方案--------------------因为&c++&标准说&(8.3.4/5):
Objects&of&array&types&cannot&be&modified,&see&3.10.
所以,name&=&"";&是编译错误。
strcpy(name,"");&的调用中&name&经&array-to-pointer&隐式转换已经变成指针类型,并且其值保存对应数组的地址。strcpy&只负责向指定地址复制字符串而已,具体这个地址怎么来的,它不管,你就是&strcpy(nullptr,"");&编译器也放行。
char&name[20]=&"";&叫初始化&(initialization),和赋值&(assignment)&不是一码事。
如果看不惯,可以用&std::array&或&std::vector.------解决方案--------------------1)&字符串指针变量是个变量,指向字符串的首地址;而字符串数组名是个常量,为字符串数组第一个元素的地址;
引自某blog:
2)字符串指针变量可以赋值,而字符串数组名不能赋值;
对于字符数组只能对各个元素赋值,不能用以下办法对字符数组赋值:&char&str[14];&str&=&"I&love&you!";&而对于字符指针变量,可采用如下赋值:&char&*a;&a&=&"I&love&you!";&赋值给a的是字符串第一个元素的地址&
3)定义一个字符串指针变量时,只给指针变量分配了空间,但指针变量存放的地址并没有分配,即不知道该指针到底指向哪个字符串(当然这种做法是危险的);而定义一个字符串数组,在编译时会占用实际的空间,比如int&a[100]则会占用400个字节的空间;
4)对于二维数组与指针数组的区别:指针数组的每一行长度可以不同,而二维数组的每行的长度是相同的。------解决方案--------------------楼主慢慢来啊,个人感觉c挺深奥的------解决方案--------------------
char&name[20];
name="";//C++没有对char&*的”=“进行运算符重载,所以会报错
------解决方案--------------------因为&a&=&&(a[0])------解决方案--------------------你可以试试
cout&&a&&endl
&&&&&&&&&&&(a[0])&&------解决方案--------------------char&name[20];
在java中&name是一个对象
而在c++中,&name是一个指针,&并且还是常指针(即指针本身不能变化,指向的值可变化)
name&=&"123456"&&就是相当于把&&"123456"所在的指针&赋值给name,&因为是常指针,&所以不符合语法规定,&就编译不过了.
而strcpy&是把&"123456"&复制到&name中,&
------解决方案--------------------“变量赋值”和“变量初始化”不是一回事!
“变量赋值”发生在运行期,其写法遵循赋值语法规定。
“变量初始化”发生在编译期或运行期,其写法遵循初始化列表语法规定。------解决方案--------------------计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构……
对学习编程者的忠告:
眼过千遍不如手过一遍!
书看千行不如手敲一行!
手敲千行不如单步一行!
单步源代码千行不如单步对应汇编一行!
VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化,这样过一遍不就啥都明白了吗。
对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。
(Turbo&C或Borland&C用Turbo&Debugger调试,Linux或Unix下用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)
想要从本质上理解C指针,必须学习汇编以及C和汇编的对应关系。
从汇编的角度理解和学习C语言的指针,原本看似复杂的东西就会变得非常简单!
指针即地址。“地址又是啥?”“只能从汇编语言和计算机组成原理的角度去解释了。”
但我又不得不承认:
&有那么些人喜欢或者适合用“先具体再抽象”的方法学习和理解复杂事物;
&而另一些人喜欢或者适合用“先抽象再具体”的方法学习和理解复杂事物。
而我本人属前者。
不要企图依赖输出指针相关表达式的值【比如printf("%p\n",...)】来理解指针的本质,
而要依赖调试时的反汇编窗口中的C/C++代码【比如void&*p=...】及其对应汇编指令以及内存窗口中的内存地址和内存值来理解指针的本质。
这辈子不看内存地址和内存值;只画链表、指针示意图,画堆栈示意图,画各种示意图,甚至自己没画过而只看过书上的图……能从本质上理解指针、理解函数参数传递吗?本人深表怀疑!
这辈子不种麦不收麦不将麦粒拿去磨面;只吃馒头、吃面条、吃面包、……甚至从没看过别人怎么蒸馒头,压面条,烤面包,……能从本质上理解面粉、理解面食吗?本人深表怀疑!!
“学习用汇编语言写程序”
“VC调试(TC或BC用TD调试)时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化,这样过一遍不就啥都明白了吗。
(Linux或Unix下可以在用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)
想要从本质上理解C指针,必须学习C和汇编的对应关系。”
不是一回事!
不要迷信书、考题、老师、回帖;
要迷信CPU、编译器、调试器、运行结果。
并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。
任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实!
有人说一套做一套,你相信他说的还是相信他做的?
其实严格来说这个世界上古往今来所有人都是说一套做一套,不是吗?
不要写连自己也预测不了结果的代码!
电脑内存或文件内容只是一个一维二进制字节数组及其对应的二进制地址;
人脑才将电脑内存或文件内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……
十字链表交换任意两个节点C源代码(C指针应用终极挑战)http://download.csdn.net/detail/zhao4zhong1/5532495(本文来自互联网,不代表搜站(/)的观点和立场)本站所有内容来自互联网,若本站收录的信息无意侵犯了贵司版权,请给我们来信(),我们会及时处理和回复,谢谢编辑推荐最近更新当前访客身份:游客 [
当前位置:
新人发帖,有问题欢迎指正.
有这么个问题,google半天无果. 文字描述是这样的:有一个class,在它的构造函数内部,调用了它自己的一个成员函数,这个成员函数内部,对它的一个成员变量进行赋值.但是发现在release版(-o2)中成员变量并没有被赋值.debug版(-od)是赋值成功的.
环境:VC2005, C++语言.
下面是代码: // b.h class B : public A { public: &&&&B(uint32 type); &&&&virtual ~B(); &&&&void setVersion(uint8 version) { mVersionFlags = ((mVersionFlags&0x00FFFFFF)|(((uint32)version)&&24)); } &&&&void setFlags(uint32 flags) { mVersionFlags = ((mVersionFlags&0xFF000000)|(flags&0x00FFFFFF)); } &&&&// other member functions here protected: &&&&uint32 mVersionF };
// b.cpp B::B(uint32 type) &&&&: A(type) { &&&&setVersion(0); // 这里调用了自己的成员函数,对mVersionFlags进行初始化 &&&&setFlags(0); }
// c.h class C : public B { public: &&&&C(): B(TYPE) { printf(&vf: %x\n&, mVersionFlags); } // 这里将父类B的成员变量打印出来,输出为非零值,而且每次运行的结果都不一样 &&&&enum &&&&{ &&&&&&&&TYPE = FOURCC('c','c','c','c') &&&&}; &&&&// other member functions and varibles here };
问题:如上所示,在class C的构造函数里打印,发现B的成员变量没有被初始化.这个问题仅出现于release版(-o2优化),debug版(-od)不出现.
做过一些尝试,有些办法可以解决,有些不行. 这些办法都可以:
// 办法1: // b.cpp B::B(uint32 type) &&&&: A(type) &&&&, mVersionFlags(0) // 办法1: 放在初始化列表里 { }
// 办法2: // b.cpp B::B(uint32 type) &&&&: A(type) { &&&&setVersion(0); &&&&setFlags(0); &&&&printf(&vf1: %x\n&, mVersionFlags); // 办法2: 使用一下mVersionFlags. 这样好像编译器就不会优化掉了 }
// 办法3: // b.cpp B::B(uint32 type) &&&&: A(type) { &&&&// 办法3: 直接将之前两个成员函数的函数体替换到这里,也能解决问题 &&&&{ mVersionFlags = ((mVersionFlags&0x00FFFFFF)|(((uint32)version)&&24)); } &&&&{ mVersionFlags = ((mVersionFlags&0xFF000000)|(flags&0x00FFFFFF)); } }
// 办法4: // b.h class B : public A { public: &&&&B(uint32 type); &&&&virtual ~B(); &&&&void setVersion(uint8 version) { mVersionFlags = ((mVersionFlags&0x00FFFFFF)|(((uint32)version)&&24)); } &&&&void setFlags(uint32 flags) { mVersionFlags = ((mVersionFlags&0xFF000000)|(flags&0x00FFFFFF)); } &&&&// other member functions here protected: &&&&volatile uint32 mVersionF // 办法4: 增加volatile标记 };
最终我使用了办法4.但是现在的问题是我还是不清楚为什么.哪位大侠能给个提示.
共有4个答案
<span class="a_vote_num" id="a_vote_num_
<span class="a_vote_num" id="a_vote_num_
构造函数里面没有对mVersionFlags 初始化。
<span class="a_vote_num" id="a_vote_num_
在debug下mVersionFlags的初始值是0,但在release下却不是这样
<span class="a_vote_num" id="a_vote_num_
FOURCC是干什么的?我把FOURCC那个TYPE改成=0之后,用-O2和-g都是可以正确出结果的。。(为了防止初始值是0,我在B的构造函数里面还把
setVersion(0);
setFlags(0);的参数改成了1,也没问题。。)
compiled by g++ (GCC) 4.8.1
(prerelease)
有什么技术问题吗?
类似的话题【C++变量如何赋值字母?】-突袭网
15:44:12【 转载互联网】 作者: &&|&责编:李强
&&& &为了解决用户可能碰到关于"C++变量如何赋值字母?"相关的问题,突袭网经过收集整理为用户提供相关的解决办法,请注意,解决办法仅供参考,不代表本网同意其意见,如有任何问题请与本网联系。"C++变量如何赋值字母?"相关的详细问题如下:怎么定义jieguo=zhengquecout && jieguo===========突袭网收集的解决方案如下===========
解决方案1:zhengque&或者 char *jieguo = &;string jieguo = &zhengque&string&gt#include &
================可能对您有帮助================
只有变量才能被赋值。=========================================== 理论上是要加的。不过不加也影响不是很多!!!!不是说没有影响!===========================================char c='a';===========================================结构赋值需要一个一个元素赋值,在C++中结构其实可以直接赋值。 结构中包含以下元素,可以直接赋值. 基本类型,比如int,char,long . 对象(必须要重载赋值操作符=,因为对...===========================================C++里字符串实际上是字符型数组,而数组在c++中存储的只是堆栈的首地址的指针, 字符串"suger"能给char *赋值,而且为"suger"首字母's'的地址===========================================可以直接赋值吧。二进制串也是字符串,都可以直接用的。而且C++的string对象很强大的。===========================================汉字根据编码方式不同,所占的大小2~4个字节不等,汉字赋值给字符变量,只显示第一个字节,出问号就不奇怪了用汉字赋值给字符数数组然后在显示的话,一定要考虑编码方式问题...===========================================比如你的a[10],还有2维数组比如a[10][20],当然有三围和多维数组了,这个要自己慢慢去熟悉其中的远离,。*p代表的是指针,就是把A赋值给指针P,C++的赋值方式是从右到左的,===========================================直接声明就好了,这就是矩阵嘛。 int a[n][n]; 不过要初始化n,然后可以通过声明下标变量进行数组的赋值和调用===========================================A:字符型的ASC码表示 B:是回车 在屏幕上看不到 也是一种字符 C:不是 已经是浮点数了 字符无法表示 D:范围在-256-255之间的数既可以用字符表示也可以用整数表示===========================================
12345678910

我要回帖

更多关于 c 变量赋值 的文章

 

随机推荐