5

タイトルが示すように、ポインターを関数に渡して、ポインターの内容のコピーだけにすることはできますか? 関数が内容を編集しないようにする必要があります。

どうもありがとうございました。

4

4 に答える 4

6

使用できますconst

void foo(const char * pc)

ここpcに const char へのポインタがあり、使用pcすると内容を編集できません。

ただし、同じコンテンツへの別のポインターを作成することでコンテンツを変更できるため、コンテンツを変更できないという保証はありません。

だから、それをどのように実装するかはあなた次第です。

于 2012-11-18T11:14:39.653 に答える
4

はい、

void function(int* const ptr){
    int i;
    //  ptr = &i  wrong expression, will generate error ptr is constant;
    i = *ptr;  // will not error as ptr is read only  
    //*ptr=10;  is correct 

}

int main(){ 
    int i=0; 
    int *ptr =&i;
    function(ptr);

}

In void function(int* const ptr)ptr は定数ですが、ptr が指しているものが定数ではないため*ptr=10、正しい式です!


void Foo( int       *       ptr,
          int const *       ptrToConst,
          int       * const constPtr,
          int const * const constPtrToConst )
{
    *ptr = 0; // OK: modifies the "pointee" data
    ptr  = 0; // OK: modifies the pointer

    *ptrToConst = 0; // Error! Cannot modify the "pointee" data
    ptrToConst  = 0; // OK: modifies the pointer

    *constPtr = 0; // OK: modifies the "pointee" data
    constPtr  = 0; // Error! Cannot modify the pointer

    *constPtrToConst = 0; // Error! Cannot modify the "pointee" data
    constPtrToConst  = 0; // Error! Cannot modify the pointer
} 

ここで学ぶ!

于 2012-11-18T11:17:43.677 に答える
3

関数がコンテンツを編集しないことを確認する必要があります

関数がconstパラメーターを取らない限り、できることは、おそらく を使用して作成されたデータのコピーを明示的に渡すことだけですmemcpy

于 2012-11-18T11:12:04.153 に答える
0

関数が内容を編集しないようにする必要があります。

どんな内容?ポインタが指す値?この場合、次のように関数を宣言できます

void function(const int *ptr);

function()ptr が指す整数を変更することはできません。

それ自体が変更されていないことを確認したいだけの場合でもptr、心配する必要はありません。(C のすべての場合と同様に) 値によって渡されるため、関数がパラメーターを変更しても、ptr渡されたポインターには影響しません。

于 2012-11-18T11:15:36.617 に答える