解答例11-2

【問1】

#include <stdio.h>

void func( char *sr );

int main( void )
{
	char str[] = "COMPUTER";
	
	func( str );
	
	return 0;
}

void func( char *sr )
{
	printf( "%s\n", sr );
}

【問2】

#include <stdio.h>
#include <ctype.h>

void oomoji( char *st ) ;

int main( void )
{
	char str[3][10] = {
		"computer", 
		"lsi-c", 
		"ms-dos"
	};
	int i;
	
	for ( i = 0; i < 3; i++ ) {
		oomoji( str[i] );	/* 文字列の先頭アドレスを渡す */
	}
	
	return 0;
}

/* 大文字変換プログラム */
void oomoji( char *st )
{
	int i = 0;
	
	while( *( st+i ) != '\0' ) {
		*( st+i ) = toupper( *( st+i ) );
		i++;
	}
	printf( "%s\n", st );
}

※ 問2では、2次元配列個々の要素の先頭アドレスを大文字変換プログラムに渡しています。これは文字列(つまり1次元配列)を一つずつ渡していることになります。補足で説明したように2次元配列の先頭アドレスのみを渡して複数の文字列を一度に大文字変換関数で処理しようとすると、以下のようなプログラムになります。(2002.06.11 追記)

#include <stdio.h>
#include <ctype.h>

void oomoji( char st[][10] ) ;

int main( void )
{
	char str[3][10] = {
		"computer", 
		"lsi-c", 
		"ms-dos"
	};

	oomoji( str );		/* 2次元配列の先頭アドレスを渡す */
	return 0;
}

/* 大文字変換プログラム */
void oomoji( char st[][10] )
{
	int i,j;
	for (i = 0; i < 3; i++ ) {
	    j = 0;
	    while( st[i][j] != '\0' ) {
	        st[i][j] = toupper( st[i][j] );
	        j++;
	    }
	    printf( "%s\n",st[i] );
	}
}

戻る


banner初心者のためのポイント学習C言語」
Copyright(c) 2000-2004 TOMOJI All Rights Reserved