次の2つの割り当ての違いは何ですか?
int main()
{
int a=10;
int* p= &a;
int* q = (int*)p; <-------------------------
int* r = (int*)&p; <-------------------------
}
私は2つの宣言の振る舞いについて非常に混乱しています。
いつ使用する必要がありますか?
次の2つの割り当ての違いは何ですか?
int main()
{
int a=10;
int* p= &a;
int* q = (int*)p; <-------------------------
int* r = (int*)&p; <-------------------------
}
私は2つの宣言の振る舞いについて非常に混乱しています。
いつ使用する必要がありますか?
int* q = (int*)p;
冗長すぎますが、正しいです。int* q = p
十分なものです。q
とは両方ともp
ポインタint
です。
int* r = (int*)&p;
は正しくありません(論理的にはコンパイルされる可能性があります&p
が)。あなたがこれを望んでいる状況は考えられません。int**
r
int*
#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;
}
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 */
}
タイプは重要です。
式p
には型int *
(ポインタからint
)があるため、式&p
には型int **
(ポインタからへのポインタint
)があります。これらは異なる、互換性のないタイプです。明示的なキャストなしでは、型の値を型int **
の変数に割り当てることはできません。int *
適切なことは書くことです
int *q = p;
int **r = &p;
値を別のタイプに変換する必要がある 理由がわからない限り、割り当てで明示的なキャストを使用しないでください。