注意:
同级别数组和指针可以修改
想改变变量的值用一级指针,想改变一级指针的值就得用二级指针,依次类推
函数内部定义的变量的地址不能作为返回值;因为变量的在函数调用结束就自动释放,返回的将会是个野指针。
多级指针
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
//int a = 10;
//int b = 20;
//int *p = &a;
//printf("变量a的地址:%p\n", p);
//printf("指针变量p的地址:%p\n", &p);
二级指针存储的是一级指针的地址
//int ** pp = &p;
//printf("指针变量pp的值:%x\n", pp);
//printf("变量a的地址:%x\n", *pp);
//printf("一级指针p的值:%x\n", p);
//printf("变量a的值:%d\n", **pp);
//printf("变量a的值:%d\n", a);
//printf("===================\n");
//printf("%p\n", p);//&a
*pp代表a的地址 p的值 一级指针
//*pp = &b; //改变p的值
//**pp = 100;
pp=10;//野指针
//printf("%p\n", p);
//printf("%d\n", b);
int a = 10;
int *p = &a;
int **pp = &p;
int ***ppp = &pp;
//ppp=三级指针的值 二级指针的地址
//*ppp=二级指针的值 一级指针的地址
//**ppp = 一级指针的值 变量的地址
//***ppp=变量的值
//printf("三级指针的值:%p\n", ppp);
//printf("二级指针的地址:%p\n", ppp);
//printf("二级指针的地址:%p\n", &pp);
//printf("二级指针的值:%p\n", *ppp);
//printf("二级指针的值:%p\n", pp);
//printf("二级指针的值:%p\n", &p);
//printf("一级指针的值:%p\n", **ppp);
//printf("一级指针的值:%p\n", *pp);
//printf("一级指针的值:%p\n", p);
//printf("一级指针的值:%p\n", &a);
printf("变量的值:%d\n", ***ppp);
printf("变量的值:%d\n", **pp);
printf("变量的值:%d\n", *p);
printf("变量的值:%d\n", a);
/*
getchar();*/
return EXIT_SUCCESS;
}
字符串 和 字符串常量
char arr1[] = "hello"; char *arr2 = "hello”;
在栈区可修改 在字符串常量区 不能被修改