nullnullC++ LANGUAGE TUTORIAL: CHARACTER ARRAYS...
文章結束給大家來個程序員笑話:[M]
????
CHARACTER ARRAYS
#include "stdio.h"int main() {int a[10]={0,1,2,3,4,5,6,7,8,9};char b[6]={'H','E','L','L','O','\0'};printf("sizeof INT is: %d\n",sizeof(int));int i=0;for(i=0;i<10;i++)printf("a[%d]=%d, &a[%d]=%d\n",i,a[i],i,&a[i]);printf("sizeof CHAR is: %d\n",sizeof(char));for(i=0;i<6;i++){//printf("b[%d]=%d, &b[%d]=%d\n",i,b[i],i,&b[i]);printf("b[%d]=%c, &b[%d]=%d\n",i,b[i],i,&b[i]);}printf("\n");for(i=0;i<6;i++){printf("b[%d]=%d, &b[%d]=%d\n",i,b[i],i,&b[i]);//printf("b[%d]=%c, &b[%d]=%d\n",i,b[i],i,&b[i]);}return 0; }/** OCS101:~/cpl # gcc testArray.c OCS101:~/cpl # ./a.out sizeof INT is: 4 a[0]=0, &a[0]=-1857442672 a[1]=1, &a[1]=-1857442668 a[2]=2, &a[2]=-1857442664 a[3]=3, &a[3]=-1857442660 a[4]=4, &a[4]=-1857442656 a[5]=5, &a[5]=-1857442652 a[6]=6, &a[6]=-1857442648 a[7]=7, &a[7]=-1857442644 a[8]=8, &a[8]=-1857442640 a[9]=9, &a[9]=-1857442636 sizeof CHAR is: 1 b[0]=H, &b[0]=-1857442688 b[1]=E, &b[1]=-1857442687 b[2]=L, &b[2]=-1857442686 b[3]=L, &b[3]=-1857442685 b[4]=O, &b[4]=-1857442684 b[5]=, &b[5]=-1857442683b[0]=72, &b[0]=-1857442688 b[1]=69, &b[1]=-1857442687 b[2]=76, &b[2]=-1857442686 b[3]=76, &b[3]=-1857442685 b[4]=79, &b[4]=-1857442684 b[5]=0, &b[5]=-1857442683 OCS101:~/cpl # ./a.out sizeof INT is: 4 a[0]=0, &a[0]=1756439296 a[1]=1, &a[1]=1756439300 a[2]=2, &a[2]=1756439304 a[3]=3, &a[3]=1756439308 a[4]=4, &a[4]=1756439312 a[5]=5, &a[5]=1756439316 a[6]=6, &a[6]=1756439320 a[7]=7, &a[7]=1756439324 a[8]=8, &a[8]=1756439328 a[9]=9, &a[9]=1756439332 sizeof CHAR is: 1 b[0]=H, &b[0]=1756439280 b[1]=E, &b[1]=1756439281 b[2]=L, &b[2]=1756439282 b[3]=L, &b[3]=1756439283 b[4]=O, &b[4]=1756439284 b[5]=, &b[5]=1756439285b[0]=72, &b[0]=1756439280 b[1]=69, &b[1]=1756439281 b[2]=76, &b[2]=1756439282 b[3]=76, &b[3]=1756439283 b[4]=79, &b[4]=1756439284 b[5]=0, &b[5]=1756439285 OCS101:~/cpl # ./a.out sizeof INT is: 4 a[0]=0, &a[0]=370342176 a[1]=1, &a[1]=370342180 a[2]=2, &a[2]=370342184 a[3]=3, &a[3]=370342188 a[4]=4, &a[4]=370342192 a[5]=5, &a[5]=370342196 a[6]=6, &a[6]=370342200 a[7]=7, &a[7]=370342204 a[8]=8, &a[8]=370342208 a[9]=9, &a[9]=370342212 sizeof CHAR is: 1 b[0]=H, &b[0]=370342160 b[1]=E, &b[1]=370342161 b[2]=L, &b[2]=370342162 b[3]=L, &b[3]=370342163 b[4]=O, &b[4]=370342164 b[5]=, &b[5]=370342165b[0]=72, &b[0]=370342160 b[1]=69, &b[1]=370342161 b[2]=76, &b[2]=370342162 b[3]=76, &b[3]=370342163 b[4]=79, &b[4]=370342164 b[5]=0, &b[5]=370342165*/????
?
????As you may already know, the C++ Standard Library implements a powerful
???? string
????class, which is very useful to handle and manipulate strings of characters. However, because strings are in fact sequences of characters, we can represent them also as plain arrays of
????
????char
????
????elements.
????For example, the following array:
| ? | char jenny [20]; |
is an array that can store up to 20 elements of type
????
????char
????
????. It can be represented as:
????
????Therefore, in this array, in theory, we can store sequences of characters up to 20 characters long. But we can also store shorter sequences. For example,
????
????jenny
????
????could store at some point in a program either the sequence
????
????"Hello"
????
????or the sequence
????
????"Merry christmas"
????
????, since both are shorter than 20 characters.
????Therefore, since the array of characters can store shorter sequences than its total length, a special character is used to signal the end of the valid sequence: the
????
????null character
????
????, whose literal constant can be written as
????
????'\0'
????
????(backslash, zero).
????Our array of 20 elements of type
????
????char
????
????, called
????
????jenny
????
????, can be represented storing the characters sequences
????
????"Hello"
????
????and
????
????"Merry Christmas"
????
????as:
????
????Notice how after the valid content a null character (
????
????'\0'
????
????) has been included in order to indicate the end of the sequence. The panels in gray color represent
????
????char
????
????elements with undetermined values.
????
Initialization of null-terminated character sequences
????Because arrays of characters are ordinary arrays they follow all their same rules. For example, if we want to initialize an array of characters with some predetermined sequence of characters we can do it just like any other array:
| ? | char myword[] = { 'H', 'e', 'l', 'l', 'o', '\0' }; |
In this case we would have declared an array of 6 elements of type
????
????char
????
????initialized with the characters that form the word
????
????"Hello"
????
????plus a null character
????
????'\0'
????
????at the end.
????But arrays of
????
每日一道理書籍好比一架梯子,它能引領人們登上文化的殿堂;書籍如同一把鑰匙,它將幫助我們開啟心靈的智慧之窗;書籍猶如一條小船,它會載著我們駛向知識的海洋。
????char
????
????elements have an additional method to initialize their values: using string literals.
????In the expressions we have used in some examples in previous chapters, constants that represent entire strings of characters have already showed up several times. These are specified enclosing the text to become a string literal between double quotes ("). For example:
| ? | "the result is: " |
is a constant string literal that we have probably used already.
????Double quoted strings (
????
????"
????
????) are literal constants whose type is in fact a null-terminated array of characters. So string literals enclosed between double quotes always have a null character (
????
????'\0'
????
????) automatically appended at the end.
????Therefore we can initialize the array of
????
????char
????
????elements called
????
????myword
????
????with a null-terminated sequence of characters by either one of these two methods:
| 1 2 | char myword [] = { 'H', 'e', 'l', 'l', 'o', '\0' }; char myword [] = "Hello"; |
In both cases the array of characters
????
????myword
????
????is declared with a size of 6 elements of type
????
????char
????
????: the 5 characters that compose the word
????
????"Hello"
????
????plus a final null character (
????
????'\0'
????
????) which specifies the end of the sequence and that, in the second case, when using double quotes (
????
????"
????
????) it is appended automatically.
????Please notice that we are talking about initializing an array of characters in the moment it is being declared, and not about assigning values to them once they have already been declared. In fact because this type of null-terminated arrays of characters are regular arrays we have the same restrictions that we have with any other array, so we are not able to copy blocks of data with an assignment operation.
????Assuming
????
????mystext
????
????is a
????
????char[]
????
????variable, expressions within a source code like:
| 1 2 | mystext = "Hello"; mystext[] = "Hello"; |
would
????
????not
????
????be valid, like neither would be:
| ? | mystext = { 'H', 'e', 'l', 'l', 'o', '\0' }; |
The reason for this may become more comprehensible once you know a bit more about pointers, since then it will be clarified that an array is in fact a constant pointer pointing to a block of memory.
????
Using null-terminated sequences of characters
????Null-terminated sequences of characters are the natural way of treating strings in C++, so they can be used as such in many procedures. In fact, regular string literals have this type (
????
????char[]
????
????) and can also be used in most cases.
????For example,
????
????cin
????
????and
????
????cout
????
????support null-terminated sequences as valid containers for sequences of characters, so they can be used directly to extract strings of characters from
????
????cin
????
????or to insert them into
????
????cout
????
????. For example:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | // null-terminated sequences of characters #include <iostream> using namespace std;int main () {char question[] = "Please, enter your first name: ";char greeting[] = "Hello, ";char yourname [80];cout << question;cin >> yourname;cout << greeting << yourname << "!";return 0; } | Please, enter your first name: John Hello, John! |
As you can see, we have declared three arrays of
????
????char
????
????elements. The first two were initialized with string literal constants, while the third one was left uninitialized. In any case, we have to specify the size of the array: in the first two (
????
????question
????
????and
????
????greeting
????
????) the size was implicitly defined by the length of the literal constant they were initialized to. While for
????
????yourname
????
????we have explicitly specified that it has a size of 80 chars.
????Finally, sequences of characters stored in
????
????char
????
????arrays can easily be converted into
????
????string
????
????objects just by using the assignment operator:
| 1 2 3 | string mystring; char myntcs[]="some text"; mystring = myntcs; |
文章結束給大家分享下程序員的一些笑話語錄: 小沈陽版程序員~~~ \n程序員其實可痛苦的了......需求一做一改,一個月就過去了;嚎~ \n需求再一改一調,一季度就過去了;嚎~ \n程序員最痛苦的事兒是啥,知道不?就是,程序沒做完,需求又改了; \n程序員最最痛苦的事兒是啥,知道不? 就是,系統好不容易做完了,方案全改了; \n程序員最最最痛苦的事兒是啥,知道不? 就是,系統做完了,狗日的客戶跑了; \n程序員最最最最最痛苦的事兒是啥,知道不? 就是,狗日的客戶又回來了,程序給刪沒了!
轉載于:https://www.cnblogs.com/jiangu66/archive/2013/05/14/3078471.html
總結
以上是生活随笔為你收集整理的nullnullC++ LANGUAGE TUTORIAL: CHARACTER ARRAYS...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【语言处理与Python】1.5自动理解
- 下一篇: QT下设置鼠标形状