これからの季節に親子でハイキング! >>

プログラミングでポインタの勉強をしているのですが、間接演算子(*)と教材に出てくるのですが、アスタリスクとなにが違うのでしょうか?
教えてください。

A 回答 (5件)

「C言語では間接演算子というものがあり、それを示す文字として*(アスタリスク)を使う」というだけのことです。



参考まで。
    • good
    • 0

文字の名前が「アスタリスク」です。


https://ja.wikipedia.org/wiki/%E3%82%A2%E3%82%B9 …

アスタリスクは C 言語において「間接演算子」という役割を担うことがあります。
他にも文脈によって「乗算」や「乗算代入」や「メンバポインタ」になるかもしれません。
https://ja.wikipedia.org/wiki/C%E3%81%A8C%2B%2B% …
    • good
    • 0

カテゴリがPerlになっていますが、


C言語の質問ですか?
それともPerlの質問でしょうか?
    • good
    • 0

関節演算子は他と使い方が違うだけでアスタリスクですよ



ポインタ変数に使われるアスタリスクや
四則演算子のアスタリスクとは別物です

関節演算子のアスタリスクは
ポインタ変数に入っているアドレスの指し示す値を取ってくる時に使います

int a = 10;

int *pa; // これがポインタ変数に使われる演算子
pa = &a;

printf("%d\n", *pa); // これが関節演算子

int b = 2;
b *= 2; // これが四則演算子
    • good
    • 2

*に限らずプログラミングでは記号は使われる場面で異なる役割になります。


+が足し算だったり、文字列連結だったり。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aと関連する良く見られている質問

Qc言語の課題がわかりません

XOR を用いて文字列の暗号化及び暗号化された文字列の復号化をするプログラムを作成し,暗号化した文字列の結果は code.txt に出力し、復号化する際には code.txt からファイルを読み込んで復号化することとし、入力する文字列は最大で 9 文字までとする。暗号化および復号化には鍵として1つの文字用いる。鍵は暗号化の際に入力させ、復号化の際にも同じ鍵を用いる。暗号化は文字列の各文字ごとに鍵との間の XOR を取るものとする。と課題で出たのですが、自分には難しすぎて出来ません。どなたかおしえてください。プログラムの途中経過と実行例を記しておきます。
#include<stdio.h>
int main(){
int x;
char a[256],b[256];

printf("Select Mode 1.Encryption, 2.Decryption :");
scanf("%d",&x);
if(a==1){
printf("Input passphrase :");
scanf("%s",a);
printf("Input key:");
scanf("%d",b);
}else{
printf("Input key:");
scanf("%d",b);

}

if(a==3){
printf("Invalid value\n");
}
return 0;
}
<実行例 1>
Select Mode 1.Encryption, 2.Decryption : 1
Input passphrase : password
Input key : $
TEWWSKV@
<実行例 2>
Select Mode 1.Encryption, 2.Decryption : 2
Input key : $
Code : TEWWSKV@
Decode : password
<実行例 3>
Select Mode 1.Encryption, 2.Decryption : 3
Invalid value

XOR を用いて文字列の暗号化及び暗号化された文字列の復号化をするプログラムを作成し,暗号化した文字列の結果は code.txt に出力し、復号化する際には code.txt からファイルを読み込んで復号化することとし、入力する文字列は最大で 9 文字までとする。暗号化および復号化には鍵として1つの文字用いる。鍵は暗号化の際に入力させ、復号化の際にも同じ鍵を用いる。暗号化は文字列の各文字ごとに鍵との間の XOR を取るものとする。と課題で出たのですが、自分には難しすぎて出来ません。どなたかおしえてください...続きを読む

Aベストアンサー

以下、ファイルの入出力を絡めると理解が遠のくので、
シンプルに、画面を通しての入出力動作をするものにしました。
forループの中で行っている1行が最も重要な箇所なので、じっくり理解して下さい。

#include<stdio.h>
#include<string.h>

int main() {
int x;
char a[9+1];
char b[1+1];
char r[9+1];

memset(a, 0x00, sizeof(a));
memset(b, 0x00, sizeof(b));
memset(r, 0x00, sizeof(r));

printf("Select Mode 1.Encryption, 2.Decryption : ");
scanf_s("%d", &x);
if (x == 1) {

printf("Input passphrase : ");
scanf("%s", a);

printf("Input key: ");
scanf("%s", b);

} else if (x == 2) {
printf("Input key: ");
scanf("%s", b);

printf("Code : ");
scanf("%s", a);

printf("Decode : ");

} else {
printf("Invalid value\n");
return 0;
}

for (unsigned int i = 0; i < strlen(a); i++) {
r[i] = a[i] ^ b[0];
}

printf("%s\n", r);

return 0;
}

以下、ファイルの入出力を絡めると理解が遠のくので、
シンプルに、画面を通しての入出力動作をするものにしました。
forループの中で行っている1行が最も重要な箇所なので、じっくり理解して下さい。

#include<stdio.h>
#include<string.h>

int main() {
int x;
char a[9+1];
char b[1+1];
char r[9+1];

memset(a, 0x00, sizeof(a));
memset(b, 0x00, sizeof(b));
memset(r, 0x00, sizeof(r));

printf("Select Mode 1.Encryption, 2.Decryption : ");
scanf_s("%d", &x);
if (x == 1) {

printf(...続きを読む

Qこのプログラミングの問題がいくら考えてもわかりません。for文とif文を組み合わせて使うと言われたの

このプログラミングの問題がいくら考えてもわかりません。for文とif文を組み合わせて使うと言われたのですが、よろしければ教えてください

Aベストアンサー

No.1です、
念のための追加です。

日本語で「〇〇の値が××だったら、、、。そうでなかったら~。」といった表現で書かれたものが多くのプログラミング言語ではifを用いた処理になります。
同じく「〇〇の値が××になるまで、、、を繰り返す。」といった表現で書かれたものfor文やwhile文を用いた処理になります。

参考まで。

QC言語の課題がわかりません char型変数をa個、int型変数をb個、double型変数を4個使うと

C言語の課題がわかりません

char型変数をa個、int型変数をb個、double型変数を4個使うとき、全部で何バイトのメモリを使うか求めるプログラムを作成せよ。なおa,bは実行中にキーボードから入力すること、また各データ型もしくは各変数のバイト数を求める際にはsizeof演算子を使うこと。

という問題なのですが、言っている意味も分からなければどのようなプログラムを書けばよいのかもわかりません。おしえてください

Aベストアンサー

『標準入力から』が正しい表現なんでしょうけど、初学者向けだとキーボードからと書かれる…でしょう。>#3


>またキーボードで入力するということはscanfを使うということなのでしょうか

scanf()だけとは限りませんけどね。
fgets()で取り込んで、数字→数値変換するとかありますし。
が、学校とかの課題レベルならscanf()辺りが妥当でしょう。
ろくにエラー処理してなくても合格もらえるんじゃないでしょうかね。

>変数の内容ではなく個数と書いてある点がよくわからなくて…

サイズ(バイト数)の計算に、個々の変数の内容は関係ないからです。
int型の変数に0が格納されているときと10000が格納されているときでメモリ上のサイズが変動したりはしません。

QC言語について質問です。 下記のように出力する際は、どのように記述すれば良いのでしょうか? ****

C言語について質問です。
下記のように出力する際は、どのように記述すれば良いのでしょうか?
********
* スタート *
********

Aベストアンサー

printf("********\n* %s *\n********\n", "スタート");

Qsleep関数の原理について

sleep関数がPC内でどういった原理で一定時間おきに動作などを行っているのか教えてください。
「Linuxカーネルがどういう働きしている」「ハードがどういう動作している」とかです。

Aベストアンサー

>一定時間おきに動作などを行っているのか
確実にsleep関数で指定した時間はお休みしているだけであり、
厳密には「一定時間おき」に動作はしません。

・LinuxはマルチタスクOSである
・一定時間(確か100Hzだったと思います)ごとにタスク切り換えを行っている

この2点がわかっていれば、
>「Linuxカーネルがどういう働きしている」
は簡単ですよね。

「sleep関数で指定した時間は、タスク切り換えで自分にCPU時間を割り当てることはしない」というだけです。

>「ハードがどういう動作している」
特段ハードでは、sleep関数実現のために何もしていません。

<おまけ>
sleep関数を呼ばなくてもマルチタスクOS上のタスクは、
 ユーザの知らないタイミングで休み休み動いている
ということです。

Qこのプログラムを教えてください。

このプログラムを教えてください。

Aベストアンサー

以下のPGで実現出来ます。
難解なところは特にありません。
初めて見る関数などの無いよう、敢えて四則演算を用いて解を導いています。
これを見て、数式の解を表現する1つの方法をぜひ身に付けて下さい。

/* 課題1 */
/* maru.c */

#include<stdio.h>
#include<string.h>
#define PI 3.14

int main() {

float d; /* 入力の直径 */
float e; /* 円周 */
float m; /* 面積 */
float s; /* 表面積 */
float v; /* 体積 */

printf("直径を入力してください[cm]: ");
scanf("%f", &d);

d = d / 2; /* 入力直径を半径に変換 */
d = d / 100; /* 入力値の単位変換 [cm]→[m] */

printf("(1)円の円周 [m] =%f\n", 2 * PI * d );
printf("(2)円の面積 [m2]=%f\n", PI * d * d );
printf("(3)球の表面積[m2]=%f\n", 4 * PI * d * d );
printf("(4)球の体積 [m3]=%f\n", (4.0 / 3.0) * PI * d * d * d);

return 0;
}

以下のPGで実現出来ます。
難解なところは特にありません。
初めて見る関数などの無いよう、敢えて四則演算を用いて解を導いています。
これを見て、数式の解を表現する1つの方法をぜひ身に付けて下さい。

/* 課題1 */
/* maru.c */

#include<stdio.h>
#include<string.h>
#define PI 3.14

int main() {

float d; /* 入力の直径 */
float e; /* 円周 */
float m; /* 面積 */
float s; /* 表面積 */
float v; /* 体積 */

printf("直径を入力してください[cm]: ");
scanf("%f", &d);

d = d / 2; /* ...続きを読む

Qインタプリタ言語とスプリクト言語

インタプリタ言語とスプリクト言語の違いがいまいち分かりません。

分かる方よろしくお願いいたします。

Aベストアンサー

スクリプト言語
一般の利用者でも扱える程度に簡単で、短い台本(スクリプト)を書く目的で使われる様な、プログラミング言語の分類
技術者が使う様な、高機能ながら高難度な汎用言語と比べられる。

インタプリタ
ソースコードを、なんらかの翻訳作業をしながら実行する、処理系の分類
コンパイラ
ソースコードを、なんらかの翻訳作業をまとめて行い実行可能な形式を作り出す、処理系の分類

インタプリタ言語
とくにそのようなプログラミング言語の分類は無い
インタプリタ処理系で実行されることが一般的なプログラミング言語、ならばスクリプト言語が多く挙げられるが、
言語によって処理系が固定されることは通常あり得ない

Qこの写真のようになってしまうのは何故でしょうか?

この写真のようになってしまうのは何故でしょうか?

Aベストアンサー

該当のブツを試したことはありませんけども……。

https://github.com/adafruit/Adafruit-Raspberry-Pi-Python-Code
内容的に細分化して、1つのGitリポジトリから分裂(?)している為、Adafruit-Raspberry-Pi-Python-Code.gitでは何も取得できないからじゃないですかね?

ADS1x15を使いたいなら…
https://github.com/adafruit/Adafruit_Python_ADS1X15
からではないでしょうか?
「Installation」のところに手順は書かれているので試してみてはどうでしょう?

Q先に質問した画像が不鮮明の為 テキストを添付します 上から10行目はinvalid characte

先に質問した画像が不鮮明の為
テキストを添付します
上から10行目はinvalid character in identifierのエラー
 
上から17行目は忘れました
言語はpythonです
質問の仕方が悪い見たいですみません

Aベストアンサー

No8です。No9の方の指摘を含めて修正し、一応ここまで表示されるようになりました。
ソースは、
https://ideone.com/SfZIWW
に格納してあります。

Q特殊な演算

2進数で表記された2つの数字を以下の演算で別の値を出す方法を考えています

その演算は同桁の数字が0と0なら0を
1と0,0と1なら1を
1,1も1
です。

010 と011 なら
1桁目が0、1なので1
2桁目は1,1なので1
3桁目は0,0なので0
となり 011 を返す


同桁の数字が0と0なら0を
1と0,0と1も0を
1,1は1
というバージョンも考えるのですが

エクセルでこのような演算を考えるには
関数であれVBAであれ
まず文字列としてleft() とか right() mid()を使って同桁の数字を取り出し
それを数値に直して計算し、3桁目*4+2桁*2+1桁 をして2進数表記にすればいいでしょうか?

それよりもっと楽なやり方はあるでしょうか?

お願いいたします

Aベストアンサー

使ってるExcelが2013かそれより新しければ、ビット演算関数があるので一発です。それより古いバージョンではVBAを使うか、1桁ごとに分解して演算するしかないですが。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング