[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 05/09 15:17 / Filesize : 213 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

【ISO/ANSI/JIS】 C言語なら俺に聞け! Part 131



1 名前:デフォルトの名無しさん [2007/02/01(木) 23:08:46 ]
このスレは標準Cのみの限定スレです。
まず問題を冷静に吟味してCの話か否かをはっきりさせてから質問しましょう。
質問する前には最低限検索を。
エラー(警告含む)が起きたのならばエラーメッセージを書きましょう。

C FAQ 日本語訳
www.kouno.jp/home/c_faq/
Cプログラマ必読 ・プログラミング言語C(通称 K&R)
www.amazon.co.jp/exec/obidos/ASIN/4320026926/250-7563469-9920244

他の過去ログはここに
nssearch.hp.infoseek.co.jp/clang/
前スレ
【ISO/ANSI/JIS】 C言語なら俺に聞け! Part 130
pc10.2ch.net/test/read.cgi/tech/1159613789/


GUIなどの標準Cではできない事の質問,ソース丸投げ、宿題、書籍 は
専門の別スレッド↓があるのでそこへさようなら。

【初心者歓迎】C/C++室 Ver.34【環境依存OK】
pc10.2ch.net/test/read.cgi/tech/1169039760/
C/C++の宿題を片付けます 82代目
pc10.2ch.net/test/read.cgi/tech/1169575464/

892 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 01:28:44 ]
!

893 名前:デフォルトの名無しさん [2007/09/03(月) 18:47:21 ]
bool a,b,c,d,e,f;
とか
int a,b,c,d,e,f;
みたいに並べて書いた変数を一気に同じ値で初期化する書き方ってありますか?
あったら教えてください。

894 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 18:55:12 ]
a = b = c = d = e = f = 0;

895 名前:デフォルトの名無しさん [2007/09/03(月) 18:57:51 ]
>>894
宣言と合わせて一行でかけませんか。

896 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 18:58:05 ]
>>893
static int a,b,c,d,e,f;
これで全部0で初期化される。
struct foo {
int a,b,c,d,e,f;
} foo = {0};
これでも全部0で初期化されるな。

まぁ、横着するなってことだ。

897 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 18:59:10 ]
int a,b,c,d,e,f;a = b = c = d = e = f = 0;


898 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 19:25:37 ]
>>897
ワロタ

899 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 19:29:01 ]
それほど面白くはない

900 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 19:59:10 ]
>>898
そんなので笑えるなんて君の人生楽しそうでうらやましいわ



901 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 20:07:29 ]
>>893
同じ値で初期化するような変数なら同じような扱いをするんだろう
配列で宣言しろ

902 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 16:40:24 ]
過疎ってますね
ビットシフトでも入れてみますか?

903 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 16:52:28 ]
聞くことがないならそれでよし
わざわざ増やさんでいいw

904 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 17:00:56 ]
ビットシフト入れたかったのに・・・

905 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 17:24:08 ]
じゃビットシフト絡みで

MMXの様に、4Byteの整数型を1Byte単位で飽和演算する方法を
昔どこかで見た気がするんだけど、どうやるんだっけ

0xFEFEFEFE に 各バイトに3を加算

0xFFFFFFFF

画像処理に使おうと思ったけど思い出せない

906 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 21:51:57 ]
MMX対応のプロセッサを使う。

907 名前:905 mailto:sage [2007/09/06(木) 21:56:42 ]
あった
www.emit.jp/prog/prog_b.html

しかし原理がよくわかんね

908 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 21:58:04 ]
if文を任意の位置でぬけるbreakとかcontinueみたいな
命令ってないですか?

909 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 22:00:49 ]
>>908
こんなイメージ?
if (...) {
...;
if (...) ifBreak;
...;
}
これくらいしか手がない気が。
if (...) {
...;
if (...) goto endIf;
...;
}
endIf:

910 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 22:01:58 ]
goto



911 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 22:15:29 ]
>>909-910
サンクス

912 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 22:38:47 ]
do {
if(...)
{
}
else if(...)
{
....
break;
}
} while(0)
とか

913 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 23:43:12 ]
俺がよく使うのは

if(...){
 do{

  ...

  if(...) break;

  ...

 }while(0);
}

914 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 00:12:33 ]
何その隠れgoto

915 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 00:51:35 ]
んな隠れgoto使うくらいなら、素直にgotoで書いた方が未だ見やすい希ガス。
そもそも、ロジックを整理すべきじゃないかとは思うが。

916 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 00:54:57 ]
if (...){

 ...

 if(!...){

  ...

 }
}

でいいんじゃないの?


917 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 01:11:34 ]
int i;

scanf("%d",&i);

while( i<1 || i>9999 )
 {
 printf("もう一度入力してください");
 scanf("%d",&i);
 }


iに数字じゃなく、aaaaなどの文字列を入れると”もう一度入力〜”がえんえんループ表示されてしまいます。
これを防ぐにはどうしたらいいのでしょうか?

918 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 01:14:43 ]
>>917
ja.wikipedia.org/wiki/Scanf#.E7.95.B0.E5.B8.B8.E3.81.AA.E5.85.A5.E5.8A.9B.E3.81.8C.E8.A1.8C.E3.82.8F.E3.82.8C.E3.81.9F.E6.99.82.E3.81.AE.E5.87.A6.E7.90.86

919 名前:917 [2007/09/07(金) 01:23:41 ]
>>918
ありがとうございます!

920 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 01:26:09 ]
>>918
その方法もどうかと思うな。
scanf()は行単位の処理じゃないのに、バッファクリアだけ行単位になってしまう。



921 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 01:34:26 ]
それではどうすればいいかってのは、このスレでガイシュツです。

922 名前:デフォルトの名無しさん [2007/09/07(金) 10:37:17 ]
typedef struct _st {
  char ** ppsz;
} st;

void freeif(st* pst) {
  for(int i = 0; i < 3; i++) {
    for(int j = 0; j < 2; j++) {
      if(*pst->ppsz != NULL) {
        free((void*)pst[i].ppsz[j]);
      }
    }
  }
  for(int i = 0; i < 3; i++) {
    if(pst->ppsz != NULL) {
      free((void*)pst[i].ppsz);
    }
  }
  if(pst != NULL) {
    free(pst);
  }
  return;
}

923 名前:デフォルトの名無しさん [2007/09/07(金) 10:38:36 ]

int main(void) {
  st* pst;
  // make struct object
  pst = (st*)malloc(3);
  if(pst == NULL) {
    printf("st is null\n");
  }
  else {
    for(int i = 0; i < 3; i++) {
    // make struct member
    pst[i].ppsz = (char**)malloc(2);
      for(int j = 0; j < 2; j++) {
        // make member area
        pst[i].ppsz[j] = (char*)malloc(10);
      }
    }
    // free memory
    freeif(pst);
  }
  return 0;
}


924 名前:デフォルトの名無しさん [2007/09/07(金) 10:40:37 ]
メモリの解放が上手くいきません。よろしくお願いします。

(正誤)
if(pst->ppsz != NULL) {  ← ×
if(pst[i].ppsz != NULL) { ← ○

925 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 11:03:01 ]
>>923
typedef struct _st {
  char ** ppsz;
} st;
static const char STRINGS[3][2][11] = {
  { "idx1:data1", "idx1:data2", },
  { "idx2:data1", "idx2:data2", },
  { "idx3:data1", "idx3:data2", },
};

void freeif(st* pst) {
  for(int i = 0; i < 3; i++) {
    for(int j = 0; j < 2; j++) {
      if(pst[i].ppsz[j] != NULL) {
        printf("pst[%d].ppsz[%d]:FREE\n", i, j);
        free((void*)pst[i].ppsz[j]);
      }
    }
  }
  for(int i = 0; i < 3; i++) {
    if(pst[i].ppsz != NULL) {
      printf("pst[%d].ppsz:FREE\n", i);
      free((void*)pst[i].ppsz);
    }
  }
  if(pst != NULL) {
    printf("pst:FREE\n");
    free(pst);
  }
  return;
}

926 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 11:03:55 ]

int main(void) {
  st* pst;
  // make struct object
  pst = (st*)malloc(3 * sizeof(st));
  if(pst == NULL) {
    printf("st is null\n");
  }
  else {
    for(int i = 0; i < 3; i++) {
      // make struct member
      pst[i].ppsz = (char**)malloc(2 * sizeof(char*));
      for(int j = 0; j < 2; j++) {
        // make member area
        pst[i].ppsz[j] = (char*)malloc(11 * sizeof(char));
        lstrcpy(pst[i].ppsz[j], STRINGS[i][j]);
      }
    }
    // debug
    printf("---------------------\n");
    for(int i = 0; i < 3; i++) {
      for(int j = 0; j < 2; j++) {
        printf("pst[%d].ppsz[%d] >> %s\n", i, j, pst[i].ppsz[j]);
      }
    }
    printf("---------------------\n");
    // free memory
    freeif(pst);
  }
  _getch();
  return 0;
}

927 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 11:31:28 ]
>>922-924
固定サイズなら無理にmalloc()/free()を使う必要はないと思うぞ。
typedef struct _st {
char ppsz[2][10];
} st;
でいいやん。


928 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 11:36:05 ]
メモリ動的確保/解放の練習とかじゃない?>>927

929 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 22:08:23 ]
C89 の規格票ってどこかで見れない?

930 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 22:38:18 ]
過去ログにURLが転がってたような。
印刷できないPDFでよければJISCのサイトで閲覧できる



931 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 23:14:17 ]
JISCって過去の規格票まで見れたっけ?
現在有効のX3010:2003はC99相当だけど。

932 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 23:19:57 ]
最新版以外はなかったことになるから。
ふつーはそれでも問題ないんだよ。非互換な改訂しなければ。
JIS漢字とかJIS漢字とかJIS漢字とか、あとJIS漢字とか

933 名前:デフォルトの名無しさん mailto:sage [2007/09/12(水) 00:31:37 ]
そうなんだよな。それにJIS漢字も追加で。

934 名前:デフォルトの名無しさん mailto:sage [2007/09/12(水) 00:53:09 ]
おいおい、JIS漢字を忘れちゃいないか?

935 名前:デフォルトの名無しさん mailto:sage [2007/09/12(水) 01:01:56 ]
規格票

936 名前:デフォルトの名無しさん mailto:sage [2007/09/12(水) 01:15:46 ]
無粋なヤツだな

937 名前:デフォルトの名無しさん mailto:sage [2007/09/12(水) 02:38:12 ]
無粋

938 名前:デフォルトの名無しさん [2007/09/12(水) 03:48:23 ]
今日学校でプロトタイプ宣言に関する問題を習ったんですが
問題:再帰関数を使って、Xのn乗を求めるプログラムを作成しなさい
プロトタイプ宣言:int Power(int x,int n);

実行画面
文字列入力==>2
文字列入力==>0
値:1

文字列入力==>2
文字列入力==>3
値:8

文字列入力==>6
文字列入力==>4
値:1296

この問題だけどうしても判らなくて困っています^^;
何方かわかる方がいましたら教えてください



939 名前:デフォルトの名無しさん mailto:sage [2007/09/12(水) 04:00:01 ]
>>938
int Power(int x,int n)
{
int i;
int sum = 1;
if(n == 0)
return 1;
else{
for(i = n; i > 0; i--)
sum *= x;
}
return sum;
}

940 名前:デフォルトの名無しさん mailto:sage [2007/09/12(水) 04:04:51 ]
再帰じゃないじゃん



941 名前:939 mailto:sage [2007/09/12(水) 04:06:40 ]
あ、再帰だったんだ、出直してくる。

942 名前:939 mailto:sage [2007/09/12(水) 04:16:22 ]
再帰版
int Power(int x,int n)
{
if(n == 0)
return 1;
else
return x*Power(x,n-1);
}

943 名前:デフォルトの名無しさん mailto:sage [2007/09/12(水) 04:21:11 ]
int Power(int x, int n)
{
if(x == 0 && n == 0) exit(1);
if(n < 0) return 0;
if(n == 0) return 1;
return Power(x, n - 1) * x;
}

944 名前:デフォルトの名無しさん mailto:sage [2007/09/12(水) 06:51:52 ]
static int power(int x, int n, int v)
{
if (n < 0) return 0;
if (n == 0) return v;
return power(x, n - 1, x * v);
}
int Power(int x, int n) {return power(x, n, 1);}
これで末尾再帰で最適化が利いてループになるはず。

945 名前:デフォルトの名無しさん mailto:sage [2007/09/13(木) 09:13:16 ]
特定の範囲の整数(例えば1〜10000)だけを入力させたいのですが、
fgets()使用時に桁溢れを完全に抑止することは可能ですか?

char *buf[10];
unsigned int value;
while(1)
{
fgets(buf, 10, stdin);

〜isdigit()とかで数値のみかを判定して、atoi()でvalueに格納してbreak〜

}
fprintf(stdout, "%u\n", value);

こんな感じで書いてるんですが、わざと入力を10桁以上にしたときに入力バッファに残ってしまってうまくいきません。
何かイイ方法あるでしょうか?(fflush(stdin)は無しで)

946 名前:945 mailto:sage [2007/09/13(木) 09:14:22 ]
>>945
× char *buf[10]
○ char buf[10]
orz

947 名前:デフォルトの名無しさん mailto:sage [2007/09/13(木) 09:19:36 ]
>>945
fgets の後で
fscanf(stdin,"%*[0-9]");

948 名前:デフォルトの名無しさん mailto:sage [2007/09/13(木) 11:18:05 ]
>>947
通常の入力をした場合(桁数が少ない場合)に入力待ちにならない?

949 名前:デフォルトの名無しさん mailto:sage [2007/09/13(木) 11:22:42 ]
fflush(stdin)と置換可能な関数を自作するのは厳しい
とはいえ、fflush(stdin)は未定義
面倒くさいけど、fgetsで読み込んだbufに'\n'が有るかチェックして、
'\n'が無いなら'\n'が出てくるまで読み捨てることになる

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

int main(void)
{
  char buf[10];
  char *p;
  int c;
  while (fgets(buf, sizeof buf, stdin) != NULL) {
    if ((p = strchr(buf, '\n')) != NULL) {
      *p = '\0';
    }
    else {
      while ((c = fgetc(stdin)) != '\n' && c != EOF) {}
    }
    puts(buf);
  }
  return 0;
}


950 名前:デフォルトの名無しさん mailto:sage [2007/09/13(木) 12:33:40 ]
もっといい方法あるのかもしれないけど、こんなんでどうかな

int get_unsigned(unsigned *v)
{
  char buf[16];
  char *p;
  int c;

  if (fgets(buf, sizeof buf, stdin) == NULL)
    return EOF;
  if (strchr(buf, '\n') == NULL)
    while ((c = fgetc(stdin)) != '\n' && c != EOF) {}
  *v = strtoul(buf, &p, 10);
  return *p;
}

int main(void)
{
  unsigned val;
  int end;

  while (printf(">>"), (end = get_unsigned(&val)) != EOF) {
    if (end == '\0' || isdigit(end)) printf("W:入力が切り捨てられました.\n");
    else if (end != '\n')      printf("W:不正文字がありました. '%c'\n", end);
    if (val < 1 || 10000 < val)   printf("W:入力範囲外です.\n");
    printf("<<%u\n", val);
  }
  return 0;
}



951 名前:945 mailto:sage [2007/09/13(木) 13:55:57 ]
>>947-950
ありがとうございます。おかげさまで解決しました。

952 名前:デフォルトの名無しさん mailto:sage [2007/09/13(木) 14:16:48 ]
scanf("%*[^\n]%*c");なんてできなかったっけ?

953 名前:デフォルトの名無しさん mailto:sage [2007/09/13(木) 14:20:57 ]
>>952
それだと、次の文字が\nだと[^\n]にマッチしないので、その時点でひっかかり
読み捨てることが出来ない。
scanf("%*[^\n]"); scanf("%*c");
ならおk

954 名前:デフォルトの名無しさん [2007/09/15(土) 02:24:20 ]
うーん勉強になるなあ。ここに書き込みしている人達て通算何年くらい勉強してきたんですか。
俺には凄過ぎっすよ。

955 名前:デフォルトの名無しさん [2007/09/15(土) 02:26:09 ]
名プログラマになる為に猛勉強だぜ。

956 名前:デフォルトの名無しさん mailto:sage [2007/09/15(土) 09:32:53 ]
ここは知ったかばっかり

957 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 15:28:45 ]
知ったかな〜知ったかな〜うにゃうにゃ
はれってほれってひれんら〜

958 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 18:37:19 ]
>>957 迂闊にも笑ってしまいますた

959 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 17:05:01 ]
SHRT_MIN >= INT_MIN && SHRT_MAX <= INT_MAX 常に成り立つと思うのですが
sizeof(short) <= sizeof(int) は処理系に関係なく成り立ちますか?

960 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 17:07:56 ]
はい。



961 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 18:26:29 ]
ANSI C99準拠の標準ライブラリについて、詳しく説明しているサイトありませんか?
素直に本買ったほうがいいでしょうか?

962 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 18:35:59 ]
っ[JIS X 3010]

963 名前:961 mailto:sage [2007/09/18(火) 19:21:05 ]
>>962
ありがとう。でも高いねコレ…素直に本買います。

964 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 20:47:24 ]
つ[ttp://www.jisc.go.jp]

965 名前:デフォルトの名無しさん [2007/09/19(水) 15:50:54 ]
設計(PAD)でファイルを開いて読み込んでファイルの情報を構造体に格納するのって
どうやるか教えていただけませんか?

966 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 16:06:49 ]
たぶんCの話じゃないと思うぞ

967 名前:デフォルトの名無しさん [2007/09/19(水) 17:28:22 ]
今C言語の勉強をしていて、ファイルの情報を構造体に格納して
それをメモリに展開するってゆーのをやってまして

968 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 17:30:39 ]
fread

969 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 17:32:23 ]
そんなもんファイルにどういう形式でデータが記録されていて
格納する構造体はどんなものかによるとしか言えん

970 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 17:34:00 ]
PADは関係あるのか?



971 名前:デフォルトの名無しさん [2007/09/19(水) 17:34:18 ]
JIS X 3010-1993 を読むと

3.4
バイト
実行環境の基本文字集合の任意の要素を保持するために十分な大きさを持つデータ記憶域の単位。
1 バイト中のビット数は,処理系定義とする。
5.2.4.2.1
CHAR_BIT
ビットフィールドでない最小オブジェクト(バイト)におけるビット数
6.3.3.4
sizeof演算子の結果は,そのオペランドの(バイト数での)大きさとする。
sizeof(char) == 1

となっているのですが,ここから char 型オブジェクトのデータ記憶域での大きさは
1 バイトで 1 バイトは CHAR_BIT ビットと判断できるでしょうか?


972 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 17:36:24 ]
マジっすか。バイト=8bitだと信じてました。
int型が、その処理系で一番速く処理できるビット幅、というのは聞いたことありますが・・・

973 名前:967 [2007/09/19(水) 17:58:00 ]
今PADの最中なんです。
問題としてはファイルにある社員IDと氏名を構造体に格納し、
メモリに展開するというものです

974 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 18:06:04 ]
C言語の規格改定って今でも進められているんでしょうか?

975 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 18:47:35 ]
>>971
そう思って構わないはず。

>>973
常に8ビットを表す単位が必要なら、オクテットを使う。

976 名前:967 [2007/09/19(水) 19:03:57 ]
文字の長さが2-10で変化するってどゆ意味ですか?
そもそも文字の長さってなんですか?

977 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 19:09:43 ]
次スレテンプレ

【ISO/ANSI/JIS】 C言語なら俺に聞け! Part 132



このスレは標準Cのみの限定スレです。
まず問題を冷静に吟味してCの話か否かをはっきりさせてから質問しましょう。
質問する前には最低限検索を。
エラー(警告含む)が起きたのならばエラーメッセージを書きましょう。

C FAQ 日本語訳
www.kouno.jp/home/c_faq/
Cプログラマ必読 ・プログラミング言語C(通称 K&R)
www.amazon.co.jp/exec/obidos/ASIN/4320026926/250-7563469-9920244

他の過去ログはここに
nssearch.hp.infoseek.co.jp/clang/
前スレ
【ISO/ANSI/JIS】 C言語なら俺に聞け! Part 131
pc11.2ch.net/test/read.cgi/tech/1170338926/


GUIなどの標準Cではできない事の質問,ソース丸投げ、宿題、書籍 は
専門の別スレッド↓があるのでそこへさようなら。

【初心者歓迎】C/C++室 Ver.42【環境依存OK】
pc11.2ch.net/test/read.cgi/tech/1188748806/
C/C++の宿題を片付けます 95代目
pc11.2ch.net/test/read.cgi/tech/1187944110/

978 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 19:15:34 ]
GUIなどの標準Cではできない事の質問,ソース丸投げ、宿題、書籍 は
                                 ↓
GUIなどの標準Cではできない事の質問、ソース丸投げ、宿題、書籍 は

何か気になるから変えてくれたら嬉しい

979 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 19:58:51 ]
>>937
お前前も来たな
帰れ
いや
死ね

980 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 19:59:21 ]
>>973だった



981 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 20:22:18 ]
(char *)*char_list->c
という式が表す値は
(char *)型のポインタcが指しているデータ
(char *)型のデータ
のどっちなんでしょうか?

982 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 20:37:54 ]
演算子の優先順位から、(char *)(*(char_list->c))

983 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 20:47:49 ]
>>982
その式を見るとカッコ(キャスト)よりも*演算子のほうが優先されている
みたいなんですが、(1+2)*(3*3)のようなカッコとキャストとしてのカッコは
別物として扱われているんでしょうか?

984 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 20:52:45 ]
そりゃ意味からして別物だろうが

985 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 20:56:27 ]
ついでに言うと、関数呼出演算子の括弧も別物。

986 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 21:04:19 ]
>>985
全部一緒くたにして考えてました。orz
最後にもう一つ、

char c = 'a';
char *pc = &c
printf("%d\n", (int)*pc);

予想では上のコードは4バイト分の整数を出力すると思ったのに、
実際にやってみたらa一つ分の97しか出力しませんでした。
これは何故なんでしょうか?

987 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 21:06:35 ]
何を言ってるんだ、お前は

988 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 21:07:45 ]
*(int*)pc とでもやりたかったのか?

989 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 21:09:33 ]
>>986
何が言いたいか分からん。
97は2桁だろ。何が出て欲しいんだか。

990 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 21:11:57 ]
>>986
charだろうがintだろうが10進数で出力したら97だろ



991 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 21:13:08 ]
>>986
>4バイト分の整数
この部分を具体例をあげつつ詳細に説明してくれ

992 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 21:15:21 ]
char c = 'a';
char *pc = &c;
printf("%d\n", sizeof((int)*pc));

4バイト(intの大きさ)分の整数が出力されているってのはあってるぞ






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<213KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef