今月の5日に新しい派遣先で仕事をすることになった.しかもC言語のポインタを多用する現場のようで,課題を与えられて1週間の試用期間に解かなければならない.
今までの派遣先はC言語を扱っていたが,今回の現場のように筆記試験や実技試験を与えられることはなかった.
本当にポインタに特化した課題のため,知識が無ければ解けない問題ばかり.しかし,学生時代の課題のようなものなのでたいしたことは無い.
たいしたことは無いが,やはりポインタに特化しているため記憶している知識ではこなせないことがわかった.そのため,先日の3連休でポインタに関する書籍を読み返した.
ネットを駆使してポインタに関する説明をしているサイトも見つけた.
結論は,今月でクビになったこと...
それでも理解したこをちょろっと掲載する.
掲載理由は,ネット検索でポインタを完全に理解していないサイトを見つけたため,私がいかに知識を得ているかを自慢したかったから.(痛い人間なので,気にしないこと^^)
#全体のソースコード
#include <stdio.h>
int main(int argc, char *args[]){
int ione = 123;
int itmp[3] = {1, 2, 3};
char *str = "hello_world!!";
char tmp[] = "hello world!!";
char *x[256];
char *y;
int *i3tmp;
int (*p3tmp)[3];
x[0] = (char *)&ione;
x[1] = str;
x[2] = tmp;
y = tmp;
i3tmp = itmp;
p3tmp = &itmp;
printf("ione:[%d]\n", *x[0] );
printf("str[%s]\n", x[1] );
printf("tmp[%s]\n", x[2] );
printf("tmp[%s]\n", y );
printf("i3tmp[%d][%d][%d]\n", i3tmp[0], i3tmp[1], i3tmp[2] );
printf("p3tmp[%d][%d][%d]\n", *p3tmp[0], *p3tmp[1], *p3tmp[2] );
return 0;
}
#charへのポインタ型変数に代入
#include <stdio.h>
int main(int argc, char *args[]){
char tmp[] = "hello world!!";
char *y;
y = tmp;
printf("tmp[%s]\n", y );
y = &tmp[0];
printf("tmp[%s]\n", y );
return 0;
}
文字列を配列に代入後,それをcharへのポインタ型変数に代入している.
表現方法はtmp
・&tmp[0]
のどちらでもかまわない.
しかし&tmp
の場合は意味が変わるため気をつけること(配列へのポインタ).
#charへのポインタの配列に代入
#include <stdio.h>
int main(int argc, char *args[]){
int ione = 123;
char *str = "hello_world!!";
char tmp[] = "hello world!!";
char *x[256];
x[0] = (char * )&ione;
x[1] = str;
x[2] = tmp;
printf("ione:[%d]\n", *x[0] );
printf("str[%s]\n", x[1] );
printf("tmp[%s]\n", x[2] );
return 0;
}
一つ目:int型の変数(ione)に数字を代入している.
二つ目:charへのポインタ型の変数(str)に文字列を代入している.
三つ目:char型の配列(tmp)に文字列を代入している.
それらをcharへのポインタの配列に代入している.そしてprintf
関数で表示させている.
#intの配列へのポインタに代入
#include <stdio.h>
int main(int argc, char *args[]){
int itmp[3] = {1, 2, 3};
int *i3tmp;
int (*p3tmp)[3];
i3tmp = itmp;
p3tmp = &itmp;
printf("i3tmp[%d][%d][%d]\n", i3tmp[0], i3tmp[1], i3tmp[2] );
printf("p3tmp[%d][%d][%d]\n", *p3tmp[0], *p3tmp[1], *p3tmp[2] );
return 0;
}
一つ目:数字をint型の配列(itmp)に代入している.
二つ目:intへのポインタ型の変数(i3tmp)を宣言している.
三つ目:intの配列へのポインタの変数(p3tmp)を宣言している.
宣言したそれぞれの変数にitmp
を代入して表示している.
しかし,表示の内容がおかしい(*p3tmp[1]
, *p3tmp[2]
).
改めて原因を探りますか(こんなことだから今月末までの契約なのだろうorz).
#参考サイト