Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
基礎情報処理演習(11)ポインタ
Search
自然言語処理研究室
November 28, 2013
Programming
0
7.6k
基礎情報処理演習(11)ポインタ
自然言語処理研究室
November 28, 2013
Tweet
Share
More Decks by 自然言語処理研究室
See All by 自然言語処理研究室
データサイエンス14_システム.pdf
jnlp
0
380
データサイエンス13_解析.pdf
jnlp
0
480
データサイエンス12_分類.pdf
jnlp
0
330
データサイエンス11_前処理.pdf
jnlp
0
460
Recurrent neural network based language model
jnlp
0
130
自然言語処理研究室 研究概要(2012年)
jnlp
0
130
自然言語処理研究室 研究概要(2013年)
jnlp
0
93
自然言語処理研究室 研究概要(2014年)
jnlp
0
110
自然言語処理研究室 研究概要(2015年)
jnlp
0
180
Other Decks in Programming
See All in Programming
効率的な開発手段として VRTを活用する
ishkawa
0
150
Google Agent Development Kit でLINE Botを作ってみた
ymd65536
2
260
なぜ「共通化」を考え、失敗を繰り返すのか
rinchoku
1
660
MDN Web Docs に日本語翻訳でコントリビュートしたくなる
ohmori_yusuke
1
130
MCPを使ってイベントソーシングのAIコーディングを効率化する / Streamlining Event Sourcing AI Coding with MCP
tomohisa
0
120
おやつのお供はお決まりですか?@WWDC25 Recap -Japan-\(region).swift
shingangan
0
140
AIプログラマーDevinは PHPerの夢を見るか?
shinyasaita
1
230
明示と暗黙 ー PHPとGoの インターフェイスの違いを知る
shimabox
2
530
Quand Symfony, ApiPlatform, OpenAI et LangChain s'allient pour exploiter vos PDF : de la théorie à la production…
ahmedbhs123
0
210
ISUCON研修おかわり会 講義スライド
arfes0e2b3c
1
450
20250628_非エンジニアがバイブコーディングしてみた
ponponmikankan
0
700
The Evolution of Enterprise Java with Jakarta EE 11 and Beyond
ivargrimstad
0
110
Featured
See All Featured
What's in a price? How to price your products and services
michaelherold
246
12k
StorybookのUI Testing Handbookを読んだ
zakiyama
30
5.9k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
32
2.4k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
18
980
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
357
30k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
50
5.5k
Into the Great Unknown - MozCon
thekraken
40
1.9k
Designing Experiences People Love
moore
142
24k
A Tale of Four Properties
chriscoyier
160
23k
Embracing the Ebb and Flow
colly
86
4.7k
A better future with KSS
kneath
238
17k
Fireside Chat
paigeccino
37
3.5k
Transcript
基礎情報処理演習 (11) ポインタ 山本和英 長岡技術科学大学 1
ポインタ 変数の住所を入れる変数 アドレス演算子 &x 変数 x の場所 間接演算子 *p ポインタ
p の指す変数の値 ・ アドレスとは「番地」=変数を記憶している場所のこと。 ・ ポインタとはアドレスを記憶した変数のこと。 ・ どこも指さないNULLポインタというものもある。 ・ 配列はポインタを使って書くことができる。 ・ 関数を使う時は、値を渡す方法とアドレスを渡す方法がある。 ポインタまとめ 2
int k = 3; k (int) 3 3
int k = 3; int *p; k (int) 3 p
ポインタ p を作る。 ここの int は、 ポインタが指す変数が int 型という意味。 4
int k = 3; int *p; p = &k; k
(int) 3 p ポインタ p に 編集 k の住所を代入する 5
int k = 3; int *p; p = &k; printf
(“%d”, *p); k (int) 3 p ポインタ p が指す変数(k) の値(*)、つまり3が表示される。 6
ポインタの作成 int* s; または int *s; ・ ここの int とは、 s
の指す先が int という意味で、ポインタ s が int という意味ではない。 ・ s の指す変数が double なら、 double *s; となる。 アドレスの代入 s = &t; ・ 変数t の住所(アドレス)を s に入れる。 ・ これによって、s を使って t を 操作できる。 ポインタの使い方 *s = 6; ・ ポインタ s が指す変数 t の値を 6 にする。つまり t = 6; と書くのと 同じ。よって、*s は t の別名と 考えてもよい。 7
配列名はポインタである int w[5]; w は w[0]を指す ポインタである。 配列はポインタ風にも書ける w[2] =
3; *(w+2) = 3; と書いても同じ 関数に配列を渡す goto_sub(&w[0]); goto_sub(w); と書いても同じ。 goto_sub(&w); ではないことに注意! 8
ポインタはいつ使うのか? いろいろありますが、授業では二つ紹介します。 1. 関数に配列を渡したい時 ポインタ一つで配列を渡せるので楽 2. 関数から二つ以上の値を受け取りたい時 受け取りたい変数のポインタを関数に渡せば 関数内でいじれるので便利 9
void function (int n1, int n2, int sum, int diff){
sum = n1 + n2; diff = n1 - n2; } void main(void){ ... a = 10; b = 5; function(a, b, wa, sa); } 動かないプログラム 10 sum と diff は 正しく計算できるが wa と sa には 反映されない
void function (int n1, int n2, int *sum, int *diff){
*sum = n1 + n2; *diff = n1 - n2; } void main(void){ ... a = 10; b = 5; function(a, b, &wa, &sa); } 改良版 11 Wa と sa のアドレスを 関数に渡すことで 変数の値が変更される
void set_number(int *vc, int no, int val){ int i; for
(i = 0; i< no; i++){ *(vc+i) = val; } } main(){ int ary[5]; set_number(ary, 5, 0); } 配列 ary のポインタと 二つの数字を渡す 関数に配列のポインタを渡す例 配列の初期化をする関数 vc[0]~vc[no-1]に val を代入 12 set_number(&ary[0], 5, 0); と書いてもよい vc[i] = val; と書いてもよい
おまけ: そう言えば... scanf_s (“%d”, &k); scanf_s で値を入力する際、&kのように変数名の 前に&をつけていたのは、 scanf_s 関数にkのアドレスを渡していたから
です。こうしないとscanf_s関数の中で変数kの値を 操作(scanf_sの場合は数値を代入)できないため、 k ではなく&kとする必要がありました。 13