指针初始化

指针初始化

大家好,又见面了,我是你们的朋友全栈君。

引用:

https://blog.csdn.net/qq_43574794/article/details/84864349

https://baike.baidu.com/item/指针初始化/3527092#1int i=10;

int * a = &i;

int * a = NULL;(编译没问题,运行错误,指针所指向地址必须为合法有效的内存地址)

a = (int *)malloc(sizeof(int));

a[0] = 1;

int * a =10;(错误写法,给指针赋值必须为地址,*p为所指向变量的值)

int *a=&i;

int * c = a + 15;(a代表数组首地址,右侧表达式表示地址向高位移动15位指针所指类型字节即移动4*15字节)a的地址是10,c的地址是10+4*15,因为a的类型是int *,地址增长时加整型的长度。

代码1:

代码语言:javascript代码运行次数:0运行复制#include

#include

int main()

{

int* a;

*a = 1;

system("pause");

return 0;

}我在这里声明创建了一个名为a的指针变量,然后把1赋值给a所指向的那块内存空间。编译结果如下:

a未初始化,到底指向哪里根本我们不得而知。所以我们在进行赋值操作的时候可能有下面几种情况:

1.a的初始值是一个非法地址,赋值语句出错,程序终止。它提示程序访问的是一个并未分配给程序的内存位置。

2.可能指针包含一个合法化的地址,而赋值语句更改了它。

所以在使用指针的时候一定要确保指针已经初始化了。

当我们不知道给指针变量初始化什么的时候我们一般初始化为NULL:

代码语言:javascript代码运行次数:0运行复制#include

#include

int main()

{

int* a = NULL;

*a = 1;

system("pause");

return 0;

}编译结果也是有问题的:

这是因为NULL指针是一个特殊的指针变量,不指向任何内存,用来表示这个指针目前未指向任何位置。

所以对NULL指针进行解引用操作是非法的。

对指针进行解引用之前,要确定它不是NULL指针

代码语言:javascript代码运行次数:0运行复制#include

#include

int main()

{

int n = 0;

int* a = NULL;

a = &n;

*a = 1;

printf("%d\n", n);

system("pause");

return 0;

}运行结束:

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/155800.html原文链接:https://javaforall.cn

相关数据

hurt为什么叫刺痛
365bet首页

hurt为什么叫刺痛

⌛ 07-14 👁️‍🗨️ 216
美图(Meitu)手机美图M6S报价
365bet世界

美图(Meitu)手机美图M6S报价

⌛ 07-06 👁️‍🗨️ 7864
有没有知道齐发之弹幕怎么获得的,游戏里没
365bet世界

有没有知道齐发之弹幕怎么获得的,游戏里没

⌛ 07-30 👁️‍🗨️ 4285
京东消费者留言分发与处理如何操作?常见问答?
365bet世界

京东消费者留言分发与处理如何操作?常见问答?

⌛ 07-08 👁️‍🗨️ 7067
省呗借款多久到账?
365bet世界

省呗借款多久到账?

⌛ 07-27 👁️‍🗨️ 7707