スレを勃てるまでもないC/C++の質問はここでat TECH
スレを勃てるまでもないC/C++の質問はここで - 暇つぶし2ch460:デフォルトの名無しさん
07/02/28 21:40:45
終了したらウィンドウが消えるのは当たり前だろ…

461:デフォルトの名無しさん
07/02/28 22:54:40
Cのポインタについてなのですが
int c;
int *p; /* ポインタの宣言 */
c = 1;
p = &a;
とすると、pにaのアドレスを代入
*p = 1;
ならpの中のアドレスのさす変数aに1を代入
ですよね?

*がない場合はアドレスを入れるものだと思ってたのですが
文字列を扱うときには
char *p = "ABC";
宣言時だろ*があったのですが
後から代入するときには
char *p;
p = "ABC";
という風に*がありませんでした
アドレスの代わりにABCが入ってるのですか?
どのような解釈をすればよろしいのでしょうか
教えてください



462:デフォルトの名無しさん
07/02/28 23:02:30
char *p = "ABC";は「char *」という型の変数pを宣言していると考えろ。
*をcharではなくpのほうへにくっつけて書くのは慣習的な理由。

こう書いても同じ意味になる。
typedef char * pchar_t;

pchar_t p = "ABC";

463:デフォルトの名無しさん
07/02/28 23:35:19
宣言時代入と、後から代入が同じということはわかりました、ありがとうございます

では
*p = 1でaに代入されるのはどういうことでしょうか?
*とpを書いているのは、アドレスの指す変数に代入と考えていいのでしょうか?

それと
p = "ABC";
の場合はアドレスの代わりにABCが入っていると考えていいのでしょうか?

464:デフォルトの名無しさん
07/02/28 23:39:11
OS:Windows XP Professional Version 2002 Service Pack 2
開発環境:Microsoft Visual C++ 6.0

===やりたいこと===
ChemDrawという化学構造を描画するソフトウェアのファイルフォーマットであるcdx形式のファイル(バイナリ)を読み込みたい

===これまでに実施した内容===
まず、CDXファイルフォーマットに関しては以下のページに書かれています。(英語)
 URLリンク(www.cambridgesoft.com)
その内、バイナリファイルを読み込む際に事前に定義されたヘッダーファイルが以下のページのファイルです
 URLリンク(www.cambridgesoft.com)
のリンクにある
 URLリンク(www.cambridgesoft.com)
のファイルがcdxファイルフォーマットを読み込む際に使用するヘッダーファイルです。この中で
 typedef UINT16 CDXTag;
 typedef INT32 CDXObjectID; // signed for now, due to mac compiler bug?
という行があるのですが、私の開発環境ではUINT16とINT32という型が存在しないため、コンパイルをしても
 c:\hogehoge\cdxconstants.h(54) : error C2146: 構文エラー : ';' が、識別子 'CDXTag' の前に必要です。
とエラーが出てしまいます。そこでUINT16ってなんだ?ってことを調べ始めて、
 ・UINT16は16bitのUINT
 ・「.NET Framework クラス ライブラリ」 においてUINT16は定義されているらしい
  URLリンク(msdn2.microsoft.com)(VS.80).aspx
ってところまでは分かったのですが、何をしたらいいのかお手上げ状態になってしまいました。
とりあえず、このヘッダーファイルがコンパイルで通るようにしたいです。よろしくおねがいします。

465:デフォルトの名無しさん
07/02/28 23:42:32
UINT16は最近のPlatform SDKに入っている
<windows.h>(の中でインクルードされているファイル)の中で宣言されている。
今回のものと.NET Frameworkのは関係ない。

手っ取り早く対処するなら、
そのヘッダをインクルードするより先に自分で宣言してしまえばよい。
typedef unsigned __int16 UINT16;
typedef __int32 INT32;

466:デフォルトの名無しさん
07/02/28 23:45:54
>>463

> int * pa; // (A)
変数paはintへのポインタであることを示す。

> *pa = 1; // (B)
> b = *pa; // (B)
*paの*は、ポインタpaが指す場所に対して代入したり値を取り出したりする。

俺の推測だが
(A)と(B)の*を無理やり同じ意味にしようとしているのか。


467:デフォルトの名無しさん
07/02/28 23:50:01
>>463

char *p; と宣言している以上は、
ポインタpに入れられるのは(char *)だよ。

"ABC"だってどこかのメモリに存在するわけで
アドレスがあるよ。



468:デフォルトの名無しさん
07/02/28 23:52:21
>>461

> p = &a; 
> とすると、pにaのアドレスを代入 
> *p = 1; 
> ならpの中のアドレスのさす変数aに1を代入 
> ですよね? 

そうだね

469:464
07/02/28 23:55:46
>>465
おおお動きました^^;

最終的に
typedef unsigned __int16 UINT16;
typedef unsigned __int32 UINT32;
typedef __int32 INT32;
の3行追加で何とか認識できました。

ありがとうございました!!

470:463 461
07/03/01 00:04:47
>>466
同じ意味かと思ってました
理解できました
ありがとうございました

>>467
納得できました、ありがとうございました

>>468
ありがとうございます


皆さん本当にありがとうございました

471:471
07/03/01 00:12:14

/************************************************************************/
/* 機能 : port5のLEDを交互に点滅させる。 */
/* */
/* 作成日 : 2007/2/27 */
/* 作成者 : 佐々木 */
/************************************************************************/

作ったプログラムソースをメモリーステックに保存して、別のパソコンでソースを
開いたら、
こんなにレイアウトが崩れてしまいます。
使っているコンパイラはBCCとGCCなのですが、
どうしたらいいですか?

472:デフォルトの名無しさん
07/03/01 00:18:21
>>466
> (A)と(B)の*を無理やり同じ意味にしようとしているのか。
そういうこと。「『*pがchar型になる』と読める」というような説明はよく見かける気がする。

URLリンク(kmaebashi.com)
> K&Rによれば、Cの宣言は、「変数が現われ得る式の構文を真似た(P.114)」そうである。
> しかし、本質的に全く異なるものを無理に似せようとしたため、
> 結局わけのわからない構文になってしまっている。

473:デフォルトの名無しさん
07/03/01 00:21:10
>>471
ソースは同一でパソコンを変えただけなんだね。
使用しているエディタが違うとかフォントが違うとかじゃないの。

474:471
07/03/01 00:30:18
フォントをいじればいいのですね。
スペースとかTabで崩れてると思うし。

475:デフォルトの名無しさん
07/03/01 00:37:01
>>474
タブがスペース何文字分なのかは迷惑な話だよね。

476:471
07/03/01 00:51:51
文字サイズをいじっても良くはなりませんでした。
そのTabがスペース何文字分かを設定するのはどこからですか?

477:471
07/03/01 00:59:41
漏れ的には、
関数の紹介文は
/*************/
/*___________*/
こんな感じでアスタリスク埋めして正確な文字数が出てるし、
TABは避けるべきだったかなと思いますた。
文頭はいいとは思うけど。
  char *NEET;
みたいに。

478:デフォルトの名無しさん
07/03/01 02:32:22
deleting Debugって出てメイクできないんですが、イミフです
ググったら全角スペースが原因とかプロジェクト設定をwinにすれば良いとか
出てたのですが、何やってもダメです。
ちなみにReleaseだと実行できます。

何が原因なのでしょう・・・?
コンパイラはbccです。

479:デフォルトの名無しさん
07/03/01 05:01:02
>>478
bccを捨てるのはどうでしょう。

>>477
囲う手間の割りに見栄えがよくないので、左側だけにすることをお勧めします。
ついでにDoxygenコメントを埋めてこんな感じ。
////////////////////////////////////////////////////////////////
/// \brief あーたら処理
///
/// なにやら処理するらしい。
/// \param[in] para パラメータ構造体
/// \return 処理結果
/// \author だれそれ
/// \date いついつ
//
説明を書き換えるだけで右側の桁を揃え直す手間を掛けるなんてナンセンスですよ。

480:デフォルトの名無しさん
07/03/01 09:19:13
class classname
{
classname(): root(0) {....}
}
とあったんですが、この書式って正しいんですか?正しければ意味とか説明があるサイトを紹介してくださいませ。
僕の持ってる本にはこのような書き方が載ってないです。。
(標準講座C++)


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch