一、没有目标的指针(野指针),如:
int *p;
printf("p= %p\n",p);
野指针的危害:
1、指向操作系统的内核区,禁止访问;
2、指向一个没有使用的内存,指针解引用合法;
3、指向一个可用地址,但是此刻被其他的程序所使用,会引发错误(能运行,但导致结果错误)
二、const修饰作用:修饰的是就近原则,修饰就近的一个类型
1、const int *p1; int *p1里面的变量包括有 p1和p1指向的变量(int),隐含变量
const修饰的是int所包含的隐含变量
2、int const *p2;
修饰的也是p2指向的隐含变量
3、int * const p3;
修饰的是p3;
4、输出型参数:调用函数,改变内存中的值
void func(int *p)
{
*p = 33;
}
int main(void)
{
int n = 1;
printf("n in yuanshi%p.\n",&n);
printf("%d.\n",n);
int *p_n = &n;
func(p_n);
printf("%d.\n",n);
printf("n in func%p",&n);
return 0;
}
5、输入型参数:const修饰的变量
6、传值调用:运用的是地址的唯一性!!实质还是传值调用,只不过是地址罢了
#include<stdio.h>
void swap(int *a, int *b)
{
int temp = 0;
temp = *a;//*a访问的是x里面的内容
*a = *b;
*b = temp;
}
int main(void)
{
int x = 33, y = 44;
printf("x = %d y = %d.\n",x,y);
int *p;
printf("p= %p\n",p);
野指针的危害:
1、指向操作系统的内核区,禁止访问;
2、指向一个没有使用的内存,指针解引用合法;
3、指向一个可用地址,但是此刻被其他的程序所使用,会引发错误(能运行,但导致结果错误)
二、const修饰作用:修饰的是就近原则,修饰就近的一个类型
1、const int *p1; int *p1里面的变量包括有 p1和p1指向的变量(int),隐含变量
const修饰的是int所包含的隐含变量
2、int const *p2;
修饰的也是p2指向的隐含变量
3、int * const p3;
修饰的是p3;
4、输出型参数:调用函数,改变内存中的值
void func(int *p)
{
*p = 33;
}
int main(void)
{
int n = 1;
printf("n in yuanshi%p.\n",&n);
printf("%d.\n",n);
int *p_n = &n;
func(p_n);
printf("%d.\n",n);
printf("n in func%p",&n);
return 0;
}
5、输入型参数:const修饰的变量
6、传值调用:运用的是地址的唯一性!!实质还是传值调用,只不过是地址罢了
#include<stdio.h>
void swap(int *a, int *b)
{
int temp = 0;
temp = *a;//*a访问的是x里面的内容
*a = *b;
*b = temp;
}
int main(void)
{
int x = 33, y = 44;
printf("x = %d y = %d.\n",x,y);