指针(c)
1.基本概念
1.64位操作系统中,指针占8个字节
在32位操作系统中,占4个字节
2.创建指针
int a=1;
int *p = &a;(int是指针类型,p为指针的名称,&a是取a的地址)
*p=100;( *p此时表示取值,即*p=100 == a=100;也可以说*p==a)
3.野指针;空指针
int *p;//野指针
int *p=NULL;//空指针
2.函数中的使用
1.为什么使用int *x,而不是int x
eg:
打印出来为
原因:
a=x,b=y。即x=1,y=2
通过中间变量t,可以发生交换,即x=2,y=1;
执行完后会释放空间,x与y被删除(如图)
正确的:
如图
swap(int *x,int *y) //表示:int *x=&a.y同理
又因为*x=a,*y=b,所以通过中间变量可以转换。
执行完后释放内存空间(如图)
3.指针的运算
eg:
1.
int a,*p=&a,*b;(定义三个变量,a,p,b.后两个为指针,且p保存了a的地址)
b=p;(此时表示b也保存了a的地址)
2.
int x=3,*p=&x,y=0;
y=*p++; //p存储的地址值加一,即指向下一个字符(因为x是整型,占4个字节。所以地址加四)
y=(*p)++; //p指向的地址里的值加一(即x++)
3.数组的复制,s1复制到s2
代码如上图:5)先判断s1指针是否指向'/0'。否,则循环。
因此编译出来为
若要只出现hello,则要先赋值在判断
注:const表示只读不改,修饰离他最近的变量 eg:
|
4.数组与指针
1.申请空间(malloc)
14)(char*)malloc(32) //申请了32个字节,并且为char型
char *str= //创建了一个char型指针str,指向了申请的内存空间
当free(str)后,*str=NULL 或者str=NULL //地址为空可以不用加*
当申请内存被释放,str指向了一个被释放掉的内存,成为野指针。
因此要将他变为空指针。
//待续。。。。。。。。
标签:字节,int,char,地址,str,指针 From: https://www.cnblogs.com/yuli10952/p/18153775