配列、文字列長の計算

1743 ワード

一般的な計算長の関数は2つあり、sizeof()とstrlen()ですが、それらの違いは大きいです.
sizeof():主に配列の長さを計算する責任を負う.
strlen():主に文字列の長さを計算します.
(1)sizeof():配列占有バイトを配列タイプで割った結果、配列要素の個数使用方法:sizeof(配列名)/sizeof(配列タイプ名)(2)strlen():strlen、文字列有効長を求める方法:strlen(文字配列名)/結果文字配列有効文字長、末尾の'/0'を含まない
注意:配列が関数パラメータとして渡されると、配列名は配列のヘッダを表し、配列の内容ではないのでsizeofとstrlenは使用できません.したがって、アドレスを転送する際には、2つのパラメータ:1、配列名を提供し、配列ヘッダアドレスを表す.2、配列要素の数.
次に、sizeof()の使い方を例に挙げて説明します.
#include<iostream>
using namespace std;
void Sum(int array[ ])
{
cout<<"sizeof(array)="<<sizeof(array)<<endl;
}
void main()
{
int a[ ]={1,2,3,4,5,6,7,8,9,10};
cout<<"sizeof(a)="<<sizeof(a)<<endl;
Sum(a);
}

演算結果は次のとおりです.
sizeof(a)=40   
sizeof(array)=4
このような結果を見て、変な感じがしますか?同じ配列で、異なる位置で出力が異なります.
解析:配列が関数パラメータとして渡されると、配列名は配列のヘッダ、すなわちポインタを表し、配列の内容ではありません.配列全体を渡すと、スタックがオーバーフローします.
したがって,主関数でsizeofを用いて計算したのは正確な配列長である.呼び出し関数では,伝達される配列は配列そのものではなく,そのアドレスであるためsizeofで計算され,実際には配列アドレスの長さであり,このときのsizeof(array),実際にはsizeof(int)である.
したがって,実際の配列長を計算するには,主関数で求めるのがよいが,呼び出し時に使いたいならパラメータとして渡すことができるだろうか.
strlen()の使い方を見てみましょう.
配列が文字列を格納する文字配列である場合、二重引用符で囲まれた文字列全体が初期化された文字配列
例えば、char a[]=「abcdefg」またはchar a[]={「abcdefg」}
求めた長さは,対応する文字列の長さではなく文字配列の長さであり,文字列の長さを1減らす必要がある.
すなわち、文字列長=文字配列長-1です.
理由:文字列を格納する文字配列の末尾に'0'文字があり、削除する必要があります.
char a[]=「abcdefg」について
sizeof(a)/sizeof(a[0])=8で、文字列の長さを要求する場合は1を減らすべきである.
しかしchar a[]={a','b','c','d','e','f','g'}については
sizeof(a)/sizeof(a[0])=7
一部の参照先:http://blog.sina.com.cn/s/blog_5fd837410100my8a.html
http://blog.csdn.net/rhzwan123/article/details/2362051