タイトルが示すように、ポインターを関数に渡して、ポインターの内容のコピーだけにすることはできますか? 関数が内容を編集しないようにする必要があります。
どうもありがとうございました。
使用できますconst
void foo(const char * pc)
ここpc
に const char へのポインタがあり、使用pc
すると内容を編集できません。
ただし、同じコンテンツへの別のポインターを作成することでコンテンツを変更できるため、コンテンツを変更できないという保証はありません。
だから、それをどのように実装するかはあなた次第です。
はい、
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
}
関数がコンテンツを編集しないことを確認する必要があります
関数がconst
パラメーターを取らない限り、できることは、おそらく を使用して作成されたデータのコピーを明示的に渡すことだけですmemcpy
。
関数が内容を編集しないようにする必要があります。
どんな内容?ポインタが指す値?この場合、次のように関数を宣言できます
void function(const int *ptr);
function()
ptr が指す整数を変更することはできません。
それ自体が変更されていないことを確認したいだけの場合でもptr
、心配する必要はありません。(C のすべての場合と同様に) 値によって渡されるため、関数がパラメーターを変更しても、ptr
渡されたポインターには影響しません。