为什么我无法访问像这样的指针的值:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int *num = 5;
printf("\n%d\n", *num);
getchar();
return 0;
}
提前感谢。
答案 0 :(得分:4)
因为您要为指针指定任意地址,并且您无法保证它是有效的,或者您的程序是否可写或可读。
指针需要指向有效内存以便取消引用它,使指针指向有效内存,你可以在函数中声明一个变量并指向它在堆栈中的地址,如下所示
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int number = 5;
int *pointer = &number;
printf("%d\n", *pointer);
return 0;
}
此处,pointer
指针指向使用运算符number
地址的&
地址。
此外,*
符号在上面的代码中有不同的用法,在第一种情况下它用于指针声明,在第二种情况下它用于指针解引用,所以这也是有效的
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int number;
int *pointer = &number; /* declare a pointer and point with it to `number's` address */
/* assign a value to the pointer via dereferencing the pointer */
*pointer = 5;
/* check this, the value of `number` has changed */
printf("%d\n", number);
return 0;
}
答案 1 :(得分:0)
指针不可解除引用,甚至无效。通常,指针仅在对象的地址,数组的一个接一个末尾或null时才有效。如果指针有效且非空,也不是一个结尾,则指针是可解除引用的。
尝试取消引用不可解除引用的指针会导致未定义的行为。
答案 2 :(得分:0)
实际上你正在访问你提到的指针。但问题是您不知道位置5
的位置或者是否是有效地址。
m
与5
的初始化无效,将调用未定义的行为。