掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板2

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.28952

ポインタ
投稿者---ミクロ(2006/11/20 21:54:04)


独学で勉強しているのですが、
もしポインタを使って、配列の中どうし足したければどうすればよろしいでしょうか?
ポインタで足すと無効なポイント加算となります。


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:ポインタ 28953 ぽへぇ 2006/11/20 22:26:38
<子記事> Re:ポインタ 28954 たかぎ 2006/11/20 22:29:01
<子記事> Re:ポインタ 28955 . 2006/11/20 22:45:23
<子記事> Re:ポインタ 28960 通りすがり 2006/11/21 11:17:17
<子記事> Re:ポインタ 28963 ぷはぁ 2006/11/21 13:40:12
<子記事> Re:ポインタ 29007 ミクロ 2006/11/23 20:35:23


No.28953

Re:ポインタ
投稿者---ぽへぇ(2006/11/20 22:26:38)


>独学で勉強しているのですが、
>もしポインタを使って、配列の中どうし足したければどうすればよろしいでしょうか?
>ポインタで足すと無効なポイント加算となります。

元のソースが書かれていないので想像でしかないですが、こういうこと?
*p1 + *p2


この投稿にコメントする

削除パスワード

No.28954

Re:ポインタ
投稿者---たかぎ(2006/11/20 22:29:01)
http://takagi.in/


やりたいことが具体的にわかりませんが...

int a[10];

という配列があって、2番目と5番目の要素を加算したければ、

a[2] + a[5]

とするだけでは?

ポインタを使っていないように見えるかもしれませんが、配列の添え字演算子がオペランドに要求するのは、配列型ではなくポインタ型ですから、間違いなくポインタを使っています。
ちょっと、難しいかもしれませんが、分からないところがあれば、また質問してください。



この投稿にコメントする

削除パスワード

No.28955

Re:ポインタ
投稿者---.(2006/11/20 22:45:23)


>ポインタを使って、配列の中どうし足したければ
ん?こういうこと?

//配列内の数値合計 sum(配列先頭アドレス,配列領域)
int sum(char *p,int n)
{
  int temp=0,i;

  for(i=0;i<n;i++){
    tenp+=*(p+i);
 }
}

動作未確認&携帯からなんで、ダメ出しお願いします。

ちなみにわかってるかもしれないけど、ポインタ変数pの指すアドレスの内容を取得するには*pでできる。


この投稿にコメントする

削除パスワード

No.28956

Re:ポインタ
投稿者---.(2006/11/20 22:51:14)


追記

すみません…

×tenp
○temp
for文のインデントが合っていない
sum関数の最後に
 return(temp);
が無い

の点が間違ってました…


この投稿にコメントする

削除パスワード

No.28960

Re:ポインタ
投稿者---通りすがり(2006/11/21 11:17:17)


皆さん推測でしか回答できていません。
ソースコードを見せてください。


この投稿にコメントする

削除パスワード

No.28963

Re:ポインタ
投稿者---ぷはぁ(2006/11/21 13:40:12)


配列aの2番目の要素と5番目の要素を足すとき、
*(a + 2) + *(a + 5)
と書けば、いかにもポインタをフル活用しているように見えそうです。
しかし、これはたかぎさんの回答にあった
a[2] + a[5]
と全く同義です。



この投稿にコメントする

削除パスワード

No.28964

Re:ポインタ
投稿者---たかぎ(2006/11/21 14:53:36)
http://takagi.in/


>配列aの2番目の要素と5番目の要素を足すとき、
>*(a + 2) + *(a + 5)
>と書けば、いかにもポインタをフル活用しているように見えそうです。
>しかし、これはたかぎさんの回答にあった
>a[2] + a[5]
>と全く同義です。

そうなんですよね。
例えば、

int a[10];
int *p = a;
p[2] + p[5];

とでもすれば、よりポインタを使っている気分に浸ることはできるのでしょうが、あくまでも気分的なものです。
要するに、「ポインタを使って」のポインタが、型としてのポインタのことなのか、ポインタ型のオブジェクトのことなのか、あるいはそれらが持つ性質なのかによって変わると思います。ポインタというから分かりにくいのであれば、「整数を使って」という表現について考えてみれば分かりやすくなります。



この投稿にコメントする

削除パスワード

No.29007

Re:ポインタ
投稿者---ミクロ(2006/11/23 20:35:23)


わかりずらくてすみません。
具体的にいうと

a[YOUSO]={2,3,4,5,6};
b[YOUSO]={5,6,7,8,9};

a=a+bを配列内の要素毎におこない
配列a[YOUSO]に格納する。
この作業をポインタを使ってするんみはどうすればよろしいでしょうか?


この投稿にコメントする

削除パスワード

No.29008

Re:ポインタ
投稿者---・(2006/11/23 20:58:35)


#include <stdio.h>

#define YOUSO (5)

int main(void)
{
    int a[YOUSO] = { 2, 3, 4, 5, 6 };
    int b[YOUSO] = { 5, 6, 7, 8, 9 };
    int i;
    
    for (i = 0; i < YOUSO; i++) {
        *(a + i) += b[i];
        printf("%d ", i[a]);
    }
    putchar('\n');
    
    return 0;
}





この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧