• c语言c++指针大集合


    指针变量

    什么叫指针,指针顾名思义就是指向一个东西,这里指针就是指向对应得变量等的内存地址。

    就这么说吧,如果我们定义了一个变量int a,这个时候系统就会给a这个变量分配4bit的内存空间。 二这个空间就有对应的名字——内存地址,就如装餐具的空间叫餐柜一样,餐柜就是它的内存地址。

    当然如何知道到 a 的内存地址是什么呢?这个时候就要用这个‘&’取地址运算符。这个当然不会陌生,当我们用c语言输入scanf("%d",&a);就会需要。这里也许会有人疑问,为什么当我输入
    字符串或数组时不用&。以后将会说到。

    指针变量的定义
    int *p=NULL; 众所周知一般变量定义后都要给初始值。这里的NULL是一个特殊的地址0,叫做零指针,这是第一种初始化方法。

    int a;
    int *p = &a;
    

    这是第二种初始化方法,&a是取a的地址赋给指针变量p。

    int *p = new(int);
    

    这是地三种初始方法,申请一个空间给p,而*p的值不确定。
    这里的p代表的是地址,而’*p’代表p地址中储存的值。

    给指针变量赋值

    int a = 1;
    int *p;
    p = &a;
    scanf("%d",*p);//结果为1可以去尝试下
    

    补充说明一下’*‘为间接运算符。

    以下代码是对指针的运用:

    #include<iostream>
    #include<cstdio>
    using namespace std;
    int main()
    {
    	int a,b,s,t,*pa,*pb;
    	pa = &a;
    	pb = &b;
    	a = 10;b = 20;
    	s = *pa + *pb;
    	printf("a=%,b=%d\n",*pa,*pb);
    	printf("s=%d,t=%d\n",s,t);
    	return 0;
    }
    

    上机实践就可以简单的明白,指针的用法了;

    指针与数组和字符串

    上面提出的可能会有人对为什么用scanf()函数输入不用取地址符呢?

    对与数组的声明

    int a[1000];
    

    这是一个简单的数组声明,而这个a代表的就是数组的第一个内存地址。我们可以把数组想像成一条绳子,被分成1000段。而a则是这条绳子的第一段。当然我们在知道每段的长度和它第一段的位置
    我们也就课以推出它第n段到第一段之间有多少段绳子。

    于是数组的赋值我们又可以这样写:

    int a[1000]
    for(int i=0;i<1000;i++)
    {
    	scanf("%d",a+i);//编译器不会报错
    }
    

    这里的a+i;不是我们平常所理解的加法这是在加上i个int型大小。
    就这么说吧——a+1,因为a是为首地址所以他下一个地址就是a+1;相当与a[1];
    而字符串也是一样的。

    指针与结构体。

    struct node
    {
    	int x;
    }*P;
    //或node *p;
    

    它同样与上面相同否要初始化;
    而这里我就说一点,调用结构体中的变量名的方法。
    p->成员名等价与(*p).成员名:

    下面给出一个结构体指针运用的举例:

    #include<iostream>
    using namespace std;
    struct student
    {
    	char name[20];
    	char sex;
    	int score;
    }s[3]={{"dasd",'f',356},//结构体数组的赋值
    	   {"sa",'m',234},
    	   {"sadas",'f',985}
    	   };
    int main()
    {
    	student*p;
    	printf("NAME   SEX SCORE\n");
    	for(p=s;p<s+3;p++)//p++与上面讲的数组a+1,一样。
    	printf("%-9s%3c%7d\n",p->name,p->sex,p->score);
    	return 0;
    }
    

    指针在动态数据结构上有相当多的用处,应多加学习。

    若有错请大老们留言指教。

    追求吾之所爱
  • 相关阅读:
    C#类型转换
    C#面向对象之多态
    C#面向对象之继承
    C#各种字段类型对比
    C#关键字:static
    C#面向对象之封装
    C#关键字:访问修饰符
    C#类型成员:构造函数
    C#类型成员:方法
    C#类类型
  • 原文地址:https://www.cnblogs.com/rstz/p/12393226.html
Copyright © 2020-2023  润新知