Submit Search
About Pointer
0 likes
752 views
Sho IIZUKA
当スライドには過激な主張が含まれています。
Technology
Related topics:
C Language
Read more
1 of 36
Download now
Download to read offline
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
More Related Content
PDF
Unity + C#講座①
Yu Yu
PDF
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
kiki utagawa
PDF
Pythonのデータ型をもっと理解する
malo 21st
PDF
03 var array_flow_func
文樹 高橋
PDF
闇魔術を触ってみた
Satoshi Sato
PDF
STLの型の使い分け(ダイジェスト版) @ Sapporo.cpp 第7回勉強会 (2014.10.18)
Hiro H.
PDF
リテラル文字列型までの道
Satoshi Sato
PDF
静的型付け言語Python
kiki utagawa
Unity + C#講座①
Yu Yu
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
kiki utagawa
Pythonのデータ型をもっと理解する
malo 21st
03 var array_flow_func
文樹 高橋
闇魔術を触ってみた
Satoshi Sato
STLの型の使い分け(ダイジェスト版) @ Sapporo.cpp 第7回勉強会 (2014.10.18)
Hiro H.
リテラル文字列型までの道
Satoshi Sato
静的型付け言語Python
kiki utagawa
What's hot
(20)
PPTX
Python 学習教材
Jun MITANI
PDF
C++ Template Meta Programming の紹介@社内勉強会
Akihiko Matuura
PPTX
Python 学習教材 (300~309ページ)
Jun MITANI
PDF
これからの「言語」の話をしよう ―― 未来を生きるためのツール
Nobuhisa Koizumi
PDF
Constexprとtemplateでコンパイル時にfizz buzz
京大 マイコンクラブ
PDF
Boost Fusion Library
Akira Takahashi
PPTX
Python 学習教材 (~299ページ)
Jun MITANI
PDF
C言語の宣言読み方講座
tetra_cat
PDF
C++のSTLのコンテナ型を概観する @ Ohotech 特盛 #10(2014.8.30)
Hiro H.
PDF
Tokyo Sky Tree
Takahiro Sugiura
PDF
F#入門 ~関数プログラミングとは何か~
Nobuhisa Koizumi
PDF
プログラムの処方箋~健康なコードと病んだコード
Shigenori Sagawa
PDF
Python 機械学習プログラミング データ分析ライブラリー解説編
Etsuji Nakai
PPTX
PHP, JavaScriptプログラマのためのC#入門
Tomo Mizoe
PDF
Scalaのオブジェクトの話
Yasuyuki Maeda
PDF
Template Meta Programming入門から応用まで
yoshihikoozaki5
PDF
20170131 python3 6 PEP526
masahitojp
PDF
FP習熟度レベルとFSharpxのIteratee
pocketberserker
PDF
Tensor flowを使った キュウリの仕分け あれこれ
Makoto Koike
PPTX
Effective python#28
bontakun
Python 学習教材
Jun MITANI
C++ Template Meta Programming の紹介@社内勉強会
Akihiko Matuura
Python 学習教材 (300~309ページ)
Jun MITANI
これからの「言語」の話をしよう ―― 未来を生きるためのツール
Nobuhisa Koizumi
Constexprとtemplateでコンパイル時にfizz buzz
京大 マイコンクラブ
Boost Fusion Library
Akira Takahashi
Python 学習教材 (~299ページ)
Jun MITANI
C言語の宣言読み方講座
tetra_cat
C++のSTLのコンテナ型を概観する @ Ohotech 特盛 #10(2014.8.30)
Hiro H.
Tokyo Sky Tree
Takahiro Sugiura
F#入門 ~関数プログラミングとは何か~
Nobuhisa Koizumi
プログラムの処方箋~健康なコードと病んだコード
Shigenori Sagawa
Python 機械学習プログラミング データ分析ライブラリー解説編
Etsuji Nakai
PHP, JavaScriptプログラマのためのC#入門
Tomo Mizoe
Scalaのオブジェクトの話
Yasuyuki Maeda
Template Meta Programming入門から応用まで
yoshihikoozaki5
20170131 python3 6 PEP526
masahitojp
FP習熟度レベルとFSharpxのIteratee
pocketberserker
Tensor flowを使った キュウリの仕分け あれこれ
Makoto Koike
Effective python#28
bontakun
Ad
Similar to About Pointer
(20)
PDF
解説#1 C言語ポインタとアドレス
Ruo Ando
PPTX
C言語ポインタ講座 (Lecture of Pointer in C)
kakira9618
PDF
C言語講習会4
odenhadengaku
PPTX
2016年第二回プレ卒研in山口研
dmcc2015
PDF
Tora pointer3
MARISHI
PDF
実行時のデータ型の表現手法
Atusi Maeda
PDF
研究生のためのC++ no.2
Tomohiro Namba
PPTX
AtCoder Beginner Contest 004 解説
AtCoder Inc.
PDF
C++ ポインタ ブートキャンプ
Kohsuke Yuasa
PDF
Processing
Akifumi Nambu
PDF
programming camp 2008, introduction of programming, algorithm
Hiro Yoshioka
PPT
プログラミングで言いたい聞きたいこと集
tecopark
PPT
プログラミングで言いたいこと聞きたいこと集
tecopark
PDF
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第5回 ‟配列と構造体„
和弘 井之上
PDF
プログラムを高速化する話
京大 マイコンクラブ
PPTX
apg4b 4.05 ポインタ
APG4b
PDF
templateとautoの型推論
MITSUNARI Shigeo
PPTX
Arduino 入門
mitunaga
PDF
PFI Seminar 2010/02/18
Preferred Networks
PDF
SSE4.2の文字列処理命令の紹介
MITSUNARI Shigeo
解説#1 C言語ポインタとアドレス
Ruo Ando
C言語ポインタ講座 (Lecture of Pointer in C)
kakira9618
C言語講習会4
odenhadengaku
2016年第二回プレ卒研in山口研
dmcc2015
Tora pointer3
MARISHI
実行時のデータ型の表現手法
Atusi Maeda
研究生のためのC++ no.2
Tomohiro Namba
AtCoder Beginner Contest 004 解説
AtCoder Inc.
C++ ポインタ ブートキャンプ
Kohsuke Yuasa
Processing
Akifumi Nambu
programming camp 2008, introduction of programming, algorithm
Hiro Yoshioka
プログラミングで言いたい聞きたいこと集
tecopark
プログラミングで言いたいこと聞きたいこと集
tecopark
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第5回 ‟配列と構造体„
和弘 井之上
プログラムを高速化する話
京大 マイコンクラブ
apg4b 4.05 ポインタ
APG4b
templateとautoの型推論
MITSUNARI Shigeo
Arduino 入門
mitunaga
PFI Seminar 2010/02/18
Preferred Networks
SSE4.2の文字列処理命令の紹介
MITSUNARI Shigeo
Ad
More from Sho IIZUKA
(6)
PDF
HDDの返品保証を使ってみた
Sho IIZUKA
PDF
FM-indexによる全文検索
Sho IIZUKA
PDF
円と円の外接線の求め方
Sho IIZUKA
PDF
円と円の交点の求め方
Sho IIZUKA
PDF
勝手に解説 TopCoder Marathon Match 82 ColorLinker
Sho IIZUKA
PDF
grepについて
Sho IIZUKA
HDDの返品保証を使ってみた
Sho IIZUKA
FM-indexによる全文検索
Sho IIZUKA
円と円の外接線の求め方
Sho IIZUKA
円と円の交点の求め方
Sho IIZUKA
勝手に解説 TopCoder Marathon Match 82 ColorLinker
Sho IIZUKA
grepについて
Sho IIZUKA
About Pointer
1.
ポインタの話をしよう ロボ研 非定期勉強会
2.
本題に入る前に • 多くの人がポインタで挫折しています • 「ポインタを理解してしまった人」は 「ポインタを勘違いしている」状態を思い出 すことができません •
どのような勘違いをしていたのか 教えてください(ブログのネタになります)
3.
今日話すこと 1. ポインタって本当に使えないとダメ? 2. 【部内の】ポインタについて思うこと【反応】 3.
これだけは使えるようになってください
4.
1. ポインタって本当に 使えないとダメ?
5.
まず結論から • マスターしなくてもだいたい大丈夫です • ただし「その手の業界」に行く人は マスターしてください
6.
ポインタは何のためにあるか → メモリを直接扱うためです
7.
なぜメモリを直接扱う必要が? • 組み込み界隈の人… デバイスの状態の読み書きをメモリアドレスを指定 して行います (Memory
Mapped IO) • OS界隈の人… ソフトウェアが使用するメモリの 割り当てを管理する必要があります • メモリの番地を指定してゴリゴリやる機能が必要
8.
なんでそんなヤバい機能が? ほとんどの人にはいらなくね? → ググってみましょう 「もともとシステムの記述用に開発された」 (引用元:e-Words)
9.
要するに… • ポインタは「プログラミングを楽にする」 といった理想的な目的で導入されているわけ ではありません(お察しください) • 多くの人にとって、ポインタの機能はオーバー スペックです •
C言語は決して万人向きではない
10.
何のためにC言語を使うのですか • 極端な話、「ポインタを使うためにC言語を使 う」であるべき • 「C言語はプログラミングの基本だから最初に マスターするべき」的な思想はヤバいと 思っています
11.
2. 【部内の】ポインタについて 思うこと【反応】
12.
これは何? ポインタに関する勘違いのあるあるネタを みんなで共有するコーナーです ! 自由に発言してください
13.
よく参考書で見るコード(1) int x, *p; x
= 1; p = &x; *p = 2; printf("x = %dn", x);
14.
ありがちな反応(1) 「何がうれしいのか分かりません」
15.
よく参考書で見るコード(2) void swap(int *x,
int *y) { int tmp = *x; *x = *y; *y = tmp; }
16.
ありがちな反応(2) そもそも void swap(int x,
int y) { int tmp = x; x = y; y = tmp; } で動くと思っていたので……
17.
(1)に関して • 例が悪いです • メリットを感じられなくても、 何も問題ありません
18.
(2)に関して • 関数呼び出しとスタックに関する話をする必 要があります • スライド作るのが面倒でした •
ホワイトボードで話をします
19.
考えられる反応 「ぜんぶ参照渡しにしたら良いんじゃないん ですか?」 ! → そういう言語もあります。 最近の主流は「だいたい参照渡し」
20.
3. これだけは使えるように なってください
21.
結局ポインタはどう使えば… • 代表的な利用パターンを4つに分類しました • この4つが使いこなせれば、基本的に困るこ とは無いはず •
使っているうちに、他の場面でも対応できる ようになるはず
22.
4つの利用パターン 1. 配列or構造体を入力として関数に渡す 2. 配列or構造体を出力として関数に渡す 3.
配列or構造体を入出力として関数に渡す 4. 複数の値を関数から取得
23.
1. 配列or構造体を 入力として関数に渡す // C言語標準ライブラリ int
puts(const char *s); size_t strlen(const char *s); int strcmp(const char *s1, const char *s2); ! // Win32API ATOM RegisterClassEX(const WNDCLASSEX *lpwcx);
24.
2. 配列or構造体を 出力として関数に渡す // C言語標準ライブラリ char
*gets(char *s); void memset(void *s, int c, size_t n); void strcpy(char *s1, const char *s2); ! // Win32API BOOL GetWindowRect(HWND hWnd, RECT *lpRect); BOOL GetCursorPos(POINT *lpPOINT);
25.
3. 配列or構造体を 入出力として関数に渡す // C言語標準ライブラリ void
qsort(void *data, size_t num_memb, size_t elem_size, int (*cmp)(const void *, const void *));
26.
4. 複数の値を関数から取得 // C言語標準ライブラリ int
scanf(...);
27.
演習のお時間です • 問題をいくつか作りました • 関数を使う問題 •
関数を作る問題 • どのパターンに当てはまるのかも 答えてください
28.
演習問題 配列の最大値を返す関数 int max_element(const int
*data, int n); があるとします。 ! int xs[] = { 1, 1, 4, 5, 1, 4 }; の最大値を求める処理を書いてください。
29.
演習問題 配列の中に特定の値xがいくつ含まれているか数える関数countを実装してください。 ! int x =
4; int xs[] = { 1, 1, 4, 5, 1, 4 }; int k; ! k = count(xs, /* 配列の要素数 = */ 6, x); ! みたいに呼び出したいです。
30.
演習問題 配列に連番を代入する関数 void iota(int *data,
int n); があるとします。 ! int xs[5]; の中身を { 0, 1, 2, 3, 4 }; にしてください。
31.
演習問題 配列を特定の値xで埋める関数fillを定義してください。 ! int x =
72; int xs[10]; ! fill(xs, /* 配列の要素数 = */ 10, x); ! みたいに呼び出したいです。
32.
演習問題 渡された文字列に含まれるアルファベットをすべて大文字に変更する関数 to_upper_stringを定義してください。 ! char s[] =
"u-hyogo"; to_upper_string(s); puts(s); // U-HYOGO ! 1文字がアルファベットかどうかの判定はint isalpha(int c) アルファベット1文字を大文字に変換するにはint toupper(int c) を使うと便利です。 ! ※isalphaやtoupperはctype.hに含まれています。
33.
演習問題 配列の連続する重複要素を消してくれる関数 int unique(int *data,
int n); があり { 1, 1, 2, 1, 3, 3, 3 } は { 1, 2, 1, 3 } になるとします。 戻り値は消した後の要素数です。 ! int xs[10] = { 1, 1, 1, 2, 3, 3, 3, 3, 4, 4 }; の連続する重複要素を消してから 消した後の配列を表示する処理を書いてください。
34.
演習問題 直交座標で表される点(x,y)を極座標(r,theta)に 変換する関数to_polarを実装してください。 ! 引数のデザインはお任せします。 偏角はatan(y/x)ではなくatan2(y,x)を使って計算しましょう。
35.
演習問題 配列の最大値とそのインデックスを計算する関数 int max_argument(const int
*data, int n, int *max_value); があるとします。 ! max_valueにintのポインタを渡すと最大値が代入されます。 ただし最大値が不要な場合はNULLを渡せばOKです。 ! int xs[6] = { 1, 1, 4, 5, 1, 4 }; の最大値のインデックスを求める処理を書いてください。
36.
演習問題 OpenCVでは画像の色表現を変換する関数cvCvtColorを使って カラー画像をグレースケール画像に変換します。 ! void cvCvtColor(const IplImage
*src, IplImage *dst, int code); ! IplImage *color = cvLoadImage("azunyan.jpg", CV_LOAD_IMAGE_COLOR); IplImage *gray = cvCreateImage(cvGetSize(color), IPL_DEPTH_8U, 1); // グレースケールに変換する処理を書いてください // codeはCV_BGR2GRAYを使います ! ※実際はメモリを解放する処理が必要です
Download