指针入门1

指针入门一

指针使用前必须初始化,指针指向一块确定的内存区域

 确定: 地址确定   大小确定

如果不进行初始化的话,这个指针就会成为“野指针”;对野指针进行操作是很容易造成程序错误的,尽量避免使用

创建指针!!!例如如下:

int *p;    //野指针
*p = 1000; //不合法

我们可以使用malloc来申请一个内存空间,平常的时候使指针指向一个数组此时所指向的地址是存在栈区(由编译器自动分配释放   ,存放函数的参数值,局部变量的值等)内的,而我们为指针用malloc申请内存时是存在堆区的,是动态的;如下:
int *p1, *p2;
int a = 100;
p1 = &a;  //a存在栈区
p2 =(int*)malloc(sizeof(int));   //堆
printf("%d",*p);


p2 = NULL;
free(p2);
切记动态申请的内存要及时释放,避免出现内存泄漏问题!!!

除了malloc之外我们也可以使用calloc函数来申请动态内存,他们两个的差别就是当你用malloc函数申请内存时内存里装的是一些垃圾数据。而你用calloc函数申请时里面会全部清0,就假如说是int的类型时里面就全部是0,是char类型时里面全部存的‘\0’!使用方法如下:
void *calloc( size_t num, size_t size );
其中size_t num是成员数量,size_t size是你所申请的类型的字节长度!

字符指针:


char c = 'A';
char *p = &c;
char c1[] = "hello";  //c1 == &c1[0]
p = &c1[0];




当用字符串常量给字符指针赋值时,不可以通过指针修改
字符串中的字符。
char c1[] = "hello";  //c1 == &c1[0]
p1 = c1;
p2 = "world";
p1[0] = 'H';    //合法
//p2[0] = 'W';  //不合法


用gets()往指定的内存区域写入内容时要提前分配充足空间
char a[100];
gets(a);  //合法 内存地址和大小确定


char *p1;
gets(p1);  //不合法 应该提前分配合法的内存空间


char *p2 = "hello";
gets(p2);  //不合法,企图修改字符串常量


char *p3;
p3 = (char*)malloc(sizeof(char)*5);

gets(p3);  //输入"hello",不合法,分配空间不足可能导致程序崩溃


还学习了有关指针的一些运算,有点儿晕,例如:

int a[3] = { 1,2,3 };
int *p = a;

我们定义一个数组a,里面有3个元素:1,2,3;在定义一个指针让他指向a

当我们进行 ++(*p++);操作后,打印出来*p的值为2,a[0]的值也为2;

当我们进行((*++p)++);操作后,打印出来*p的值为3,a[0]的值为1;

当我们进行(++*p)++;操作后,打印出来的*p的值为3,a[0]的值也为3;

当我们进行((*++p)+1);操作后,打印出来*p的值为2,a[0]的值为1;

还有很多,绕来绕去头晕,我现在的总结就是当进行

*p++和*++p操作时就是使他指向的地址右移一位,即此时指向的a[1];

进行*(p)++和++*p的时候地址没动,是他本身的值增加1,此时a[0]也随动!!!




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值