No.3ベストアンサー
- 回答日時:
いずれも、正確ではありません。
ポインタは、矢印に例えてもよいでしょう。
char *p ;
とすることで
p →
という矢印が用意されます。
で、その先がどこを指しているか、わかりません。
「NULLを指している」といったことも決まっていません。
char buf[256], c ;
p = buf ; /* p→ buf[0] */
p = &c ; /* p→ c */
p = malloc(256); /* p→ mallocで確保した領域 */
等と、意味のあるものと結びつけることによって、はじめて「ポインタpを通してその先にあるものにアクセスする」ということができるようになります。
> ①ポインタとして宣言した場合は、キーボードからの入力に使用できない。
宣言したあと、入力先に対応した領域と結びつけてあれば、入力できます。
結び付けられていないポインタから、「その先」を使おうとしたらうまく動作しないのは、キーボードからの入力だけではありません。
C言語では「文字列なんて無い」という考えが必要です。
「文字列」だと思っているものは「charの配列」です。
"abc" と「文字列」に見えるものは、
char str_abc[]={'a','b','c',0} ;
と、どこかに書いてあって、このchar配列 abc を使うことと同じです。
char *p ;
char buf[256] ;
p="abc" ; /* p = str_abc と同じで、 配列の先頭へのポインタとして解釈されるからできる */
buf="abc" ; /* buf = str_abc と同じで、配列に配列は代入できない */
> 配列として宣言した場合は、初期化以外で文字列を代入することは出来ない
初期化は、= を使っていますが、代入ではありません。
あくまで「初期化」です。
配列全体に代入できないのは、どんな場合でもできません。
char buf[] ="abc" ;
は代入しているわけではありません。
char buf[]={'a','b','c',0} ;
の別記法となっています。
No.2
- 回答日時:
#1のかたが言っている「そんなことはない」の実例です。
---------------------------------------------
#include<stdio.h>
#include<string.h>
int main(){
int a;
int b;
int *p;
char str1[10] = "xyz"; //②配列として宣言した場合で初期化で文字列を代入すること
char str2[10];
char str3[10];
p = &b;
printf("a=>");
scanf("%d",&a); //①ポインタとして宣言した場合は、キーボードからの入力に使用できない。
printf("b=>");
scanf("%d",p); //①でポインターでキーボードからの入力を受け取る方法
printf("a=%d b=%d\n",a,b); //結果の確認
printf("a=%d b=%d\n",a,*p); //結果の確認
strcpy(str2,"opq"); //②配列として宣言した場合で初期化以外で文字列を代入すること
str3[0] = 'A'; //②配列として宣言した場合で初期化以外で文字列を代入すること
str3[1] = 'B'; //同上
str3[2] = 'C'; //同上
str3[3] = '\0'; //同上
printf("str1=%s\n",str1); //結果の確認
printf("str2=%s\n",str2); //結果の確認
printf("str3=%s\n",str3); //結果の確認
return 0;
}
----------------------------------
以下、実行結果です。
a=>3
b=>5
a=3 b=5
a=3 b=5
str1=xyz
str2=opq
str3=ABC
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語 コマンドライン引数 4 2023/02/09 18:47
- C言語・C++・C# 関数ポインタの高速化のメリット 7 2023/05/05 20:15
- C言語・C++・C# C言語 配列とポインタについて 2 2022/06/02 11:53
- C言語・C++・C# c言語 配列とポインタについて 3 2023/02/09 22:53
- C言語・C++・C# C#の問題です。 文字列型の配列 s[100] にキーボードから入力された100文字以内の文字列(単 2 2022/06/22 15:18
- C言語・C++・C# C言語の質問です。 以下の命令を実行するプログラムを作りました ①文字列aとbの長さを表示 ②aとb 1 2022/04/29 15:35
- Excel(エクセル) エクセルのマクロを教えてください。 1 2022/03/30 09:29
- マウス・キーボード Google検索の英語キーボード 英語のキーボードの配列が元に戻らなくなりました まえの配列は左上に 1 2022/06/19 11:41
- C言語・C++・C# C言語 ポインタ 配列 2 2022/06/02 17:29
- C言語・C++・C# 双方向リスト 1 2023/06/28 04:16
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
char*を初期化したいのですが
-
C言語にて構造体のメンバがNULL...
-
C言語のintとcharの違いってな...
-
エクセルのMID関数は、C言語では?
-
fstream型オブジェクトを関数の...
-
CStringからchar*への型変換に...
-
wsprintf( ポインタ , "%d" , "...
-
new charとnew char[N]の違いは?
-
2次元配列の文字"列"の初期化方法
-
ポインタを使って回文かどうか...
-
C言語の文字列について
-
配列
-
C言語 strstrの実装
-
fgetc( )の戻り値はなぜ整数??
-
動的メモリの初期化方法について。
-
char型にint型の数値を代入する。
-
C言語の文字リテラル中の16進文...
-
c言語の文字列とポインタについ...
-
SetWindowTextについて。
-
入力された文字列の中の数字を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
char*を初期化したいのですが
-
CStringからchar*への型変換に...
-
C言語のintとcharの違いってな...
-
C言語にて構造体のメンバがNULL...
-
小数点入りの文字列をfloat型に...
-
strcat関数を自作したいです
-
C言語のプログラムについてです
-
const char* s1とただのchar s1...
-
DWORDとcharの変換
-
char型にint型の数値を代入する。
-
文字列の途中から途中までを抽出
-
new charとnew char[N]の違いは?
-
文字列内の数字削除
-
char 文字列型 の表現範囲が-12...
-
fgetc( )の戻り値はなぜ整数??
-
csvファイルをfscanfで読み込む...
-
fstream型オブジェクトを関数の...
-
エクセルのMID関数は、C言語では?
-
ポインタを使って回文かどうか...
-
ポインタ配列
おすすめ情報