1

次の2つの割り当ての違いは何ですか?

int main()
{
    int a=10;
    int* p=  &a;

    int* q = (int*)p; <-------------------------
    int* r = (int*)&p; <-------------------------
}

私は2つの宣言の振る舞いについて非常に混乱しています。
いつ使用する必要がありますか?

4

4 に答える 4

10
int* q = (int*)p;

冗長すぎますが、正しいです。int* q = p十分なものです。qとは両方ともpポインタintです。

int* r = (int*)&p;

は正しくありません(論理的にはコンパイルされる可能性があります&pが)。あなたがこれを望んでいる状況は考えられません。int**rint*

于 2012-07-12T11:33:34.600 に答える
1
#include <stdio.h>
int main()
{
    int a = 10;   /* a has been initialized with value 10*/

    int * p = &a; /* a address has been given to variable p which is a integer type pointer
                   * which means, p will be pointing to the value on address of a*/

    int * q = p ; /*q is a pointer to an integer, q which is having the value contained by p,                     * q--> p --> &a; these will be *(pointer) to value of a which is 10;

    int * r = (int*) &p;/* this is correct because r keeping address of p, 
                         * which means p value will be pointer by r but if u want
                         * to reference a, its not so correct.
                         * int ** r = &p; 
                         * r-->(&p)--->*(&p)-->**(&p)                             
                         */
       return 0;
}
于 2012-07-12T11:52:48.257 に答える
0
int main()
{
    int a=10;
    int* p=  &a;

    int* q  = p; /* q and p both point to a */
    int* r  = (int*)&p; /* this is not correct: */
    int **r = &p; /* this is correct, r points to p, p points to a */

    *r = 0; /* now r still points to p, but p points to NULL, a is still 10 */
}
于 2012-07-12T11:35:33.663 に答える
0

タイプは重要です。

pには型int *(ポインタからint)があるため、式&pには型int **(ポインタからへのポインタint)があります。これらは異なる、互換性のないタイプです。明示的なキャストなしでは、型の値を型int **の変数に割り当てることはできません。int *

適切なことは書くことです

int  *q = p;
int **r = &p;

値を別のタイプに変換する必要がある 理由がわからない限り、割り当てで明示的なキャストを使用しないでください。

于 2012-07-12T14:31:53.053 に答える