指针的概念

描述

 

简单回顾一下指针的概念

内存会划分以字节为单位的空间,每一个字节都有一个编号(地址/指针)

指针变量可以存放这个地址/指针

注:我们日常所说的指针,一般是指针变量

 

下面让我们坐上指针进阶的直通车,来到第一站!字符指针

字符指针

代码示例:

 

int main(){  char ch = 'w';  char* p= &ch;    char* pa = "abcdef";  return 0;}

 

字符变量ch里面存放了字符w

字符指针p里面存放了ch的地址

指针变量pa里面存放了abcdef字符串的地址,我们并没有对这个字符串进行初始化。而是直接把它放进了指针变量pa里面。

和前两行的字符w不同,abcdef是存储在内存中的只读数据区,无法修改,即便通过指针也无法修改。

为了避免理解出错,我们一般会加上const修饰

 

const char* pa = "abcdef";

 

const放在*的左边

表示const修饰的指针指向的内容,表示指针指向的内容不能通过指针来改变

但是指针变量本身是可以改变的

const放在*的右边

表示const修饰的是指针变量本身,指针变量的内容不能被修改

但是*pa指针指向的内容是可以通过指针来修改的

代码示例:

 

int main(){  char arr1[] = "abcdef";  char arr2[] = "abcdef";
  const char* str1 = "abcdef";  const char* str2 = "abcdef";
  if (arr1 == arr2)    printf("arr1==arr2
");  else    printf("arr1!=arr2
");
  if (str1 == str2)    printf("str1==str2
");  else    printf("str1!=str2
");
  return 0;}

 

它的结果如下:

指针

在例子1里面我们提到过,str1和str2这种情况都指向一个常量字符串

既然字符串abcdef无法被改变,编译器也没有必要创建两个独立的内存空间来存放两个相同的字符串

所以str1和str2的地址是完全一样的

而arr1和arr2是完全不同的数组,它们的首元素地址不一样,打印的结果是不相等

typedef关键字

如何使用:

在MSDN中,我们可以查找到typedef的定义

指针

简单地说,typedef的作用就是把一个已有的类型名换一个新的名字

 

typedef int* pint;

 

这句代码的意思是:将int*命名为pint

pint在使用的时候和int*完全一致

我们仍然可以使用int*

在结构体里面,我们可以用typedef来缩短原有结构体定义的语句

如:将struct Stu命名为Stu

指针

typedef和#define的区别

我们同样可以使用#define语句,进行这项操作

 

#define PINT int*

 

定义语句PINT为int*

指针连续定义

先来了解一下如何正确连续定义两个指针

 

int*pa,*pb;//正确的连续定义
int*pa,pb;//错误//pa是int*类型,而pb是int类型

 

因为这两个的情况非常容易搞混,所以我们不建议连续定义指针

 

typedef int* pint;#define PINT int*
int main(){    pint pa,pb;//可连续定义指针    //pa-->int*    //pb-->int*    PINT pa,pb;//等同于int*pa,pb    //pa-->int*    //pb-->int}

 

        ·typedef会产生一个新的变量类型

        ·#define只是在对应位置进行替换

因为typedef产生了一个新的类型,pint为int*,但与int*也有不同

 

int pa,pb;//pa,pb都是int类型pint pa,pb;//pa,pb都是int*类型

 

而我们直接用int*进行连续定义指针变量是错误的

 

int*pa,pb;//错误//pa是int*类型,而pb是int类型

 

你学会了吗?我反正是学废了。  

      审核编辑:彭静
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分