#指针的各种应用(一)
C语言相较其他高级语言的精髓就在于指针的应用。指针可以用来直接对内存进行操作,虽然很多时候会显得很繁琐,很麻烦,但是他所具备的是其他高级语言难以媲美的高效。接下来向大家介绍一下。
指针:
简单的说,指针指向一个内存地址,其自身也是一个存在内存空间中的值,指针占4个字节的内存长度,也有其自己的地址。指针的用处非常多啦。
建立链表
typedef struct student
{
struct DATA data;
struct student * next;
}STU,*Pstu;
字符串常量
char *str=“hello world”;
1
函数传参
void func(int *a,int *b,int *c)
{
*a=1;
*b=2;
*c=3;
}
大家都知道函数中的参数只是一个替代传入变量的临时变量,当函数执行结束时就会被销毁。同时函数只能有一个返回值,那当我们想要返回多个值或者在函数中想直接修改变量值时就要用到指针了(C++中还有引用)。
指针是最基本的知识点啦,因为我这水平还远达不到系统讲解的水平,所以只是捡一些自己熟悉的,用的较多的来写。基础性,系统性的学习还是得看其他大神的了。
二级指针(指针的指针):
**p;
1
指向一个指针的地址的指针。
二级指针主要用在函数传参中,像是在函数中为指针动态分配内存空间,就要用到二级指针。
先上一段错误代码,大家引以为鉴:
#include
#include<string.h>
#include<stdlib.h>
using namespace std;
void func(char p)
{
p=(char)malloc(100);
}
int main()
{
char *str=NULL;
func(str);
strcpy(str,“hello world”);
cout<<str<<endl;
return 0;
}
————————————————
版权声明:本文为优快云博主「核心已转储」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/wsshj159/article/details/54293671
熟悉的段错误。。。这看起来和上面的例子差不多啊,为什么会段错误。首先说下段错误吧,我们对没有使用权限的内存空间进行了操作,也常称为越界,就会报段错误。这种问题在编译时是不会报错的,只有在运行时程序会崩溃,所以出了这种错误,那可就有的找了。
再说说为什么会出错,因为分配内存空间应该是对指针进行的。根据上面说的函数中想直接修改变量值就要用到指针。我们也看到了,上例只是传了一个指针,这不就相当于只是创建了一个临时变量,那在函数结束时p指针就被销毁了,那就是并没有为传入的str分配空间,所以再操作必定越界。那该如何解决?
#include
#include<string.h>
#include<stdlib.h>
using namespace std;
void func(char **p) //指针的指针
{
p=(char)malloc(100);
}
int main()
{
char *str=NULL;
func(&str); //传入指针的地址
strcpy(str,“hello world”);
cout<<str<<endl;
return 0;
}
对,还是上面的思想,我们只要传指针的指针也就是二级指针就可以解决啦,这块还是有些绕,只可意会。不过只要理解了这一点,之后的复杂嵌套也都不在话下。
作为初学者,实在是经验有限,写个长篇大论确实难度颇高,以后还是一点一点来吧。
话说之前以为自己要开始程序员之路了,没想到自己第一份工作经选择了运维。不过心里还是放不下开发啊,如今拨乱反正,继续程序员之路。
————————————————
版权声明:本文为优快云博主「核心已转储」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/wsshj159/article/details/54293671