1.认识
与初阶有所不同的是,这里会涉及更多的不同类型的指针。那什么是指针,什么是指针类型?
1)指针指地址,指向内存某一字节单元,是内存的编号。指针大小由本机中有多少根地址线决定,一根地址能表示0.1两个状态——即一个比特位。当机器有32根地址线时,就是32个比特位,指针的大小也就是32个比特位——4字节
2)指针类型指指针所指向地址存放的数据的类型是啥,列如int a=0;int *p=&a,p是指针,指向的内容是a,a的类型为int,所以该指针的类型为int*.
3)指针类型的重要性:只有知道了指针的类型我们才能知道当我们在使用这个指针的时候,他所能够访问内存的权限有多大。列如他是一个int*型的指针,我们在对他解引用的时候,他就能访问四个字节的内容
我们来看这样一段代码,觉得输出的结果是啥
#include<stdio.h>
int main()
{
int arr[10] = { 0 };
printf("%p ",arr);
printf("%p ",& arr);
printf("%p ", &arr[0]);
printf("%p ", arr+1);
printf("%p ", &arr+1);
printf("%p ", &arr[0]+1);
return 0;
}
欢迎在下方留言哦!!!!
2.指针类型
上面认识知道了指针类型是啥以及它的重要性,现在就来了解到底有多指针类型,它们如何使用
1)一级指针:主要指它所指向的内容为基本的数据内型列如int,char,float等,用int*,char*,float*来表示
2)二级指针:指它所指向的内容为指针,也就是这个指针所指向的内存当中存放的内容为指针,用int**来表示
3)char*:为啥要单独拎出来呢主要是因为他与其他一级不同的是,它可以char*p="dbfhsg",直接创建指针的时候后接它所指向的内容,P存放的也是该字符串的首地址
#include <stdio.h>
int main()
{
char str1[] = "hello bit.";
char str2[] = "hello bit.";
char *str3 = "hello bit.";
char *str4 = "hello bit.";
if(str1 ==str2)
printf("str1 and str2 are same\n");
else
printf("str1 and str2 are not same\n");
if(str3 ==str4)
printf("str3 and str4 are same\n");
else
printf("str3 and str4 are not same\n");
return 0;
}
看看这道题你会做吗??
后面的指针类型就开始比较复杂,会初学者来说会见的比较少,但是我们只要把握他的命名方式就能很快地知道它是什么指针。列如数组指针,指针前面是数组,那么它所指向的内容存放的就是数组,int*p,当我们看到有*在类型后面就能知道P的类型为指针,*前面的类型就是它所指向的内存中存放的数据的类型。把握这些,我们继续来看
4)数组指针:int(*p)[ ],区别于int*p[ ]
5)函数指针:void (*p)()区别于void * p ()
上面两种区分我会专门在后面的讲解,而且会有很多笔试题做哦!!!
记得关注