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;
}

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

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

发布了18 篇原创文章 · 获赞 2 · 访问量 570

猜你喜欢

转载自blog.csdn.net/xiaoxiao66668/article/details/103393589