プログラミングの小さな常識:配列の基本的な知識と配列に関する演算
7686 ワード
1 D配列の一般的な形式は、タイプシンボル配列名[定数式]です.
1次元配列の使用:1.配列は下付き文字でアクセスし、下付き文字は0から開始します.//int arr[10]; 2.配列の大きさは計算によって得ることができる. //int sz=sizeof(arr)/sizeof(arr[0]); 1 D配列のメモリへの格納:配列はメモリに連続的に格納されます.1次元配列のポインタアクセス:配列の配列名は実は配列の最初の要素のアドレスで、配列名+整数の演算を通じて、配列の各要素のアドレスを得ることができます.
例:
2 D配列の一般的な形式は、タイプ説明子配列名[定数式][定数式]2 D配列の使用です.2 D配列の使用も、下付き文字でアクセスします.メモリに格納される2 D配列:メモリにも2 D配列が連続して格納されます.2 D配列のポインタアクセス
注意:文字列の実際の長さを測定するために、C言語は「文字列終了フラグ」を規定し、文字「0」を終了フラグとする.文字列配列に複数の文字が存在する場合、前の9文字は空の文字("0")ではなく、10番目の文字が"0"である場合、配列に有効な文字が9文字である文字列があるとみなされます.つまり、「0」に遭遇すると、文字列が終了し、その前の文字が文字列として扱われることを意味します.
1.配列名はsizeof()の内部に単独で配置され、配列名は配列全体を表す
sizeof(配列名)は配列全体のサイズを計算し、単位はバイトです.
2.&配列名、配列名は配列全体&配列名を表し、配列全体のアドレスを取り出す
3.それ以外のすべての配列名は、ヘッダ要素のアドレスを表します.
ポインタの初歩的な紹介:1.メモリ内の1つのメモリユニット(バイト)は1つのアドレスに対応します.
2.32のプラットフォーム上のポインタのサイズは4バイトです.64ビットプラットフォームは8バイトです.
C言語から変数アドレスを取り出す
ポインタは、アドレスを専用に格納する変数として理解することができる.ポインタ変数の定義:
ポインタを手に入れるときもポインタが指す変数を見つけることができます.ここでは*(解引用オペレータ)を使用します.
strlenとsizeof
strlen()は関数表現文字列長sizeof()は演算子であり、内部式は演算に関与しない
sizeof(配列)のsizeof値は、配列によって消費されるメモリバイト数に等しい.
配列に関する演算:実行環境32ビットコンパイル環境
1 D配列
文字配列
2 D配列2 Dはいれつ
1次元配列の使用:1.配列は下付き文字でアクセスし、下付き文字は0から開始します.//int arr[10]; 2.配列の大きさは計算によって得ることができる. //int sz=sizeof(arr)/sizeof(arr[0]); 1 D配列のメモリへの格納:配列はメモリに連続的に格納されます.1次元配列のポインタアクセス:配列の配列名は実は配列の最初の要素のアドレスで、配列名+整数の演算を通じて、配列の各要素のアドレスを得ることができます.
例:
#include
int main()
{
int arr[10]={0};
int i=0;
for(i=0;i
2 D配列の一般的な形式は、タイプ説明子配列名[定数式][定数式]2 D配列の使用です.2 D配列の使用も、下付き文字でアクセスします.メモリに格納される2 D配列:メモリにも2 D配列が連続して格納されます.2 D配列のポインタアクセス
注意:文字列の実際の長さを測定するために、C言語は「文字列終了フラグ」を規定し、文字「0」を終了フラグとする.文字列配列に複数の文字が存在する場合、前の9文字は空の文字("0")ではなく、10番目の文字が"0"である場合、配列に有効な文字が9文字である文字列があるとみなされます.つまり、「0」に遭遇すると、文字列が終了し、その前の文字が文字列として扱われることを意味します.
char arr[]="abc";// \0
char arr[3]={'a','b','c'}//
char*p="abcdef"//*p
1.配列名はsizeof()の内部に単独で配置され、配列名は配列全体を表す
sizeof(配列名)は配列全体のサイズを計算し、単位はバイトです.
2.&配列名、配列名は配列全体&配列名を表し、配列全体のアドレスを取り出す
3.それ以外のすべての配列名は、ヘッダ要素のアドレスを表します.
ポインタの初歩的な紹介:1.メモリ内の1つのメモリユニット(バイト)は1つのアドレスに対応します.
2.32のプラットフォーム上のポインタのサイズは4バイトです.64ビットプラットフォームは8バイトです.
C言語から変数アドレスを取り出す
int n=10;
&n;// n
ポインタは、アドレスを専用に格納する変数として理解することができる.ポインタ変数の定義:
int *p=NULL;// , NULL
char *p=NULL;// , NULL
ポインタを手に入れるときもポインタが指す変数を見つけることができます.ここでは*(解引用オペレータ)を使用します.
int n=10;int *p_n=&n;// n p_n 。
*p_n=20;// n 。
strlenとsizeof
strlen()は関数表現文字列長sizeof()は演算子であり、内部式は演算に関与しない
short s=1;
int n-10;
printf("%d
",sizeof(s=n+1));//2
printf("%d
".s);//1
sizeof(配列)のsizeof値は、配列によって消費されるメモリバイト数に等しい.
char a1[] = "abc";
int a2[3];
sizeof( a1 ); // 4, NULL
sizeof( a2 ); // 3*4=12( int)
配列に関する演算:実行環境32ビットコンパイル環境
1 D配列
#include
#include
int main()
{
int a[]={1,2,3,4};
printf("%d
",sizeof(a));
//16, ,a[] 4 int , , 16
printf("%d
",sizeof(a+0));
//4,(a+0)
printf("%d
",sizeof(*a));
//4, a[] ,
printf("%d
",sizeof(a+1));
//4,(a+1)
printf("%d
",sizeof(a[1]));
//4,
printf("%d
",sizeof(&a));
//4, , ,
printf("%d
",sizeof(*&a));
//16,* , a[]
printf("%d
",sizeof(&a+1));
//4, a[]
printf("%d
",sizeof(&a[0]));
//4, a[]
printf("%d
",sizeof(&a[0]+1));
//4, a[]
return 0;
}
文字配列
#include
#include
int main()
{
char arr[]={'a','b','c','d','e','f'};
printf("%d
",sizeof(arr));
//6, ,arr[] 6 char , 1 , 6
printf("%d
",sizeof(arr+0));
//4,(arr+0)
printf("%d
",sizeof(*arr));
//1, arr[]
printf("%d
",sizeof(arr[1]));
//1,
printf("%d
",sizeof(&arr));
//4,
printf("%d
",sizeof(&arr+1));
//4, arr[]
printf("%d
",sizeof(&arr[0]+1));
//4,
printf("%d
",strlen(arr));
// '\0' , '\0' ,
printf("%d
",strlen(arr+0));
// '\0' , '\0' ,
printf("%d
",strlen(*arr));
// *arr , 'a', 97 , 97 ,
printf("%d
",strlen(arr[1]));
// arr ,
printf("%d
",strlen(&arr));
// '\0',
printf("%d
",strlen(&arr+1));
// +6 '\0' , +6
printf("%d
",strlen(&arr[0]+1));
// +5 '\0' , +5
return 0;
}
#include
#include
int main()
{
char arr[]="abcdef";
printf("%d
",sizeof(arr));
//7, '\0' ,
printf("%d
",sizeof(arr+0));
//4, ,
printf("%d
",sizeof(*arr));
//1, ,
printf("%d
",sizeof(arr[1]));
//1, ,
printf("%d
",sizeof(&arr));
//4, ,
printf("%d
",sizeof(&arr+1));
//4, arr[]
printf("%d
",sizeof(&arr[0]+1));
//4, ,
printf("%d
",strlen(arr));
//6, , '\0'
printf("%d
",strlen(arr+0));
//6, , '\0'
printf("%d
",strlen(*arr));
// *arr , 'a', 97 , 97 ,
printf("%d
",strlen(arr[1]));
// arr ,
printf("%d
",strlen(&arr));
//6, , '\0'
printf("%d
",strlen(&arr+1)):
// , arr ,
printf("%d
",strlen(&arr[0]+1));
//5,
return 0;
}
#include
#include
int maim()
{
char *p="abcdef";
printf("%d
",sizeof(p));
//4, p ,
printf("%d
",sizeof(p+1));
//4, p ,
printf("%d
",sizeof(*p));
//1, , p
printf("%d
",sizeof(p[0]));
//1, p ,
printf("%d
",sizeof(&p));
//4, p ,
printf("%d
",sizeof(&p+1));
//4,char * *pp=&p , 1 char * , char *
printf("%d
",sizeof(&p[0]+1));
//4, 'b' ,
printf("%d
",strlen(p));
//6, 'a' '\0'
printf("%d
",strlen(p+1));
//5, 'b' '\0'
printf("%d
",strlen(*p));
// ,*p , 'a', 97 , 97 ,
printf("%d
",strlen(p[0]));
// ,
printf("%d
",strlen(&p));
// , p '\0'
printf("%d
",strlen(&p+1));
//
printf("%d
",strlen(&p[0]+1));
//5, '\0'
return 0;
}
2 D配列2 Dはいれつ
#include
int main()
{
int a[3][4]={0};
printf("%d
",sizeof(a));
//48, 12 ,48
printf("%d
",sizeof(a[0][0]));
//4,
printf("%d
",sizeof(a[0]));
//16,
printf("%d
",sizeof(a[0]+1));
//4, , +1,
printf("%d
",sizeof(a+1));
//4, a
printf("%d
",sizeof(&a[0]+1));
//4, a , +1
printf("%d
",sizeof(*a));
//16, ,
printf("%d
",sizeof(a[3]));
//16, , ,
return 0;
}