在C语言中,指向常量整数的指针是如何工作的?

在C语言中,指向常量整数的指针是如何工作的?,c,pointers,constants,C,Pointers,Constants,我尝试在C中使用指向常量整数的指针: void *p = NULL; p = (int *) 1; printf("p=%d\n", *(int *)p); 但我有一个片段错误 我无法理解C/o中指向常量的指针如何声明变量 *(int *)p 您正在解除对p的关联,该指针的值为1。它不太可能是一个有效的地址,分段错误也就不足为奇了 注意:p不是指向constinteger的指针,它的值为常量整数 您正在解除对p的关联,该指针的值为1。它不太可能是一个有效的地址,分段错误也就不足为奇了 注意

我尝试在C中使用指向常量整数的指针:

void *p = NULL;
p = (int *) 1;
printf("p=%d\n", *(int *)p);
但我有一个片段错误

我无法理解C/o中指向常量的指针如何声明变量

 *(int *)p
您正在解除对
p
的关联,该指针的值为
1
。它不太可能是一个有效的地址,分段错误也就不足为奇了

注意:
p
不是指向
const
integer的指针,它的值为常量整数

您正在解除对
p
的关联,该指针的值为
1
。它不太可能是一个有效的地址,分段错误也就不足为奇了

注意:
p
不是指向
const
integer的指针,它的值为常量整数

您正在解除对
p
的关联,该指针的值为
1
。它不太可能是一个有效的地址,分段错误也就不足为奇了

注意:
p
不是指向
const
integer的指针,它的值为常量整数

您正在解除对
p
的关联,该指针的值为
1
。它不太可能是一个有效的地址,分段错误也就不足为奇了


注:
p
不是指向
const
整数的指针,它的值是一个常量整数。

p=(int*)1不会将指针
p
设置为指向值为
1
的内存位置。这将指针的值设置为1,即,将指针设置为指向地址为
1

p=(int*)1的内存位置不会将指针
p
设置为指向值为
1
的内存位置。这将指针的值设置为1,即,将指针设置为指向地址为
1

p=(int*)1的内存位置不会将指针
p
设置为指向值为
1
的内存位置。这将指针的值设置为1,即,将指针设置为指向地址为
1

p=(int*)1的内存位置不会将指针
p
设置为指向值为
1
的内存位置。这将指针的值设置为1,即,将指针设置为指向地址为
1

的内存位置。您不是将指针设置为常数,而是将常数转换为指针。你应该这样做:

const int one = 1;
const int *p;
p = &one;
p = &1;
但是,您不能执行以下操作:

const int one = 1;
const int *p;
p = &one;
p = &1;

因为文字常量没有内存位置。

您不是将指针指向常量,而是将常量转换为指针。你应该这样做:

const int one = 1;
const int *p;
p = &one;
p = &1;
但是,您不能执行以下操作:

const int one = 1;
const int *p;
p = &one;
p = &1;

因为文字常量没有内存位置。

您不是将指针指向常量,而是将常量转换为指针。你应该这样做:

const int one = 1;
const int *p;
p = &one;
p = &1;
但是,您不能执行以下操作:

const int one = 1;
const int *p;
p = &one;
p = &1;

因为文字常量没有内存位置。

您不是将指针指向常量,而是将常量转换为指针。你应该这样做:

const int one = 1;
const int *p;
p = &one;
p = &1;
但是,您不能执行以下操作:

const int one = 1;
const int *p;
p = &one;
p = &1;
因为文字常量没有内存位置。

请尝试以下操作:

void *p = NULL;
const int num = 1;
p = (int*)(&num);
printf("p=%d\n", *((int *)p));
试试这个:

void *p = NULL;
const int num = 1;
p = (int*)(&num);
printf("p=%d\n", *((int *)p));
试试这个:

void *p = NULL;
const int num = 1;
p = (int*)(&num);
printf("p=%d\n", *((int *)p));
试试这个:

void *p = NULL;
const int num = 1;
p = (int*)(&num);
printf("p=%d\n", *((int *)p));


@Yun Lungle这是一个无效地址,你不能访问它。@Yun Lungle这是一个无效地址,你不能访问它。@Yun Lungle这是一个无效地址,你不能访问它。@Yun Lungle这是一个无效地址,你不能访问它。我知道了。我必须声明一个常量变量来创建一个指针可以指向的内存空间。我说得对吗?我明白了。我必须声明一个常量变量来创建一个指针可以指向的内存空间。我说得对吗?我明白了。我必须声明一个常量变量来创建一个指针可以指向的内存空间。我说得对吗?我明白了。我必须声明一个常量变量来创建一个指针可以指向的内存空间。我说得对吗?谢谢。你给我另一个想法。谢谢。你给我另一个想法。谢谢。你给我另一个想法。谢谢。你给我另一个想法。似乎不允许指针直接指向常量。谢谢。您是对的:需要进行此更改p=(int*)(&num);似乎不允许指针直接指向常量。谢谢。您是对的:需要进行此更改p=(int*)(&num);似乎不允许指针直接指向常量。谢谢。您是对的:需要进行此更改p=(int*)(&num);似乎不允许指针直接指向常量。谢谢。您是对的:需要进行此更改p=(int*)(&num);