11

さて、charポインタを別の関数に渡そうとしています。これはcharの配列では実行できますが、charポインターでは実行できません。問題は、サイズがわからないため、main()関数内でサイズについて何も宣言できないことです。

#include <stdio.h>

void ptrch ( char * point) {
    point = "asd";
}

int main() {
    char * point;
    ptrch(point);
    printf("%s\n", point);
    return 0;
}

これは機能しませんが、次の2つは機能します。

1)

#include <stdio.h>

int main() {
    char * point;
    point = "asd";
    printf("%s\n", point);
    return 0;
}

2)

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

void ptrch ( char * point) {
    strcpy(point, "asd");
}

int main() {
    char point[10];
    ptrch(point);
    printf("%s\n", point);
    return 0;
}

だから私は私の問題の理由と可能な解決策を理解しようとしています

4

5 に答える 5

21

charポインタへのポインタが渡されるため、これは機能するはずです。したがって、ポインタへの変更はその後外部に表示されます。

void ptrch ( char ** point) {
    *point = "asd";
}

int main() {
    char * point;
    ptrch(&point);
    printf("%s\n", point);
    return 0;
}
于 2013-01-15T05:02:06.010 に答える
11
void ptrch ( char * point) {
    point = "asd";
}

ポインタは値によって渡され、このコードはコピーしてから、コピーを上書きします。したがって、元のポインタは変更されません。

PSpoint = "blah"文字列リテラルを作成しているときに、変更しようとすると未定義動作になることに注意してください。const char *

修正するには- @HassanTMのようにポインタをポインタに渡すか、次のようにポインタを返します。

const char *ptrch () {
    return "asd";
}

...
const char* point = ptrch();
于 2013-01-15T05:00:13.943 に答える
3

ここ:

int main() { char * point; ptrch(point);

あなたはpoint価値を渡しています。次に、ptrchの独自のローカルコピーをpointを指すように設定し"asd"pointmainそのままにします。

main解決策は、ポインタを'sに渡すことpointです。

void ptrch(char **pp) { *pp = "asd"; return; }

于 2013-01-15T05:01:16.597 に答える
1

関数内のポインターの値を変更すると、その1回の関数呼び出しでのみ変更されたままになります。ポインタで頭を混乱させないで、次のことを試してください。

void func(int i){
  i=5;
}
int main(){
  int i=0;
  func(i);
  printf("%d\n",i);
  return 0;
}

あなたのポインターと同じです。それが指すアドレスは変更しません。

値で渡された変数に割り当てる場合、関数外の変数は変更されません。ポインタ(pointerへの)でそれを渡し、それを逆参照することによってそれを変更することができ、それはintと同じです-この場合、型がintであるかchar*であるかは関係ありません。

于 2013-01-15T05:02:07.273 に答える
-1

最初に機能を宣言する......このように

 #include<stdio.h>
 void function_call(char s)

次にメインコードを書く.....

void main()
{
    void (*pnt)(char);  //  pointer function declaration....
    pnt=&function_call;  //    assign address of function
    (*pnt)('b');   //   call funtion....
}
于 2016-12-13T06:30:44.920 に答える