【C语言】指针基本概念

A.指针概念:

     (维基百科)在计算机科学中,指针是编程语言中的一个对象,利用地址,它的值直接指向存在电脑存储器中另一个地方的值。由于通过地址能用到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象的称为“指针”,意思是通过它能找到以它为地址的内存单元。

#include<stdio.h>
int main()
{
   int a = 10;
   int *p = &a;//使用&操作符,对变量a取出它的地址
               //p变量存储a的地址,p就是一个指针变量
   return 0;
}

通俗来讲,指针就是一个变量用来存储地址的变量。

B.指针的作用:

1.指针是存放地址的,地址是为了标识一块地址空间

2.因为指针存放地址,内存的访问因此更加的便利

C.指针的大小:

在32位平台是4个字节,在64位平台是8个字节

指针的类型:

type+*  。例如char* 类型的指针是为了存放char类型的变量

指针的运算:

1.指针加减整数

int main()
{
	int n = 10;
	char *p = (char*)&n;
	int *pp = &n;
	printf("%p\n", &n);
	printf("%p\n", p);
	printf("%p\n", p+1);
	printf("%p\n", pp);
	printf("%p\n", pp+1);
	system("pause");
	return 0;
}

运行结果为:

由此可知指针类型决定了指针移动的字节数,char类型指针移动一个字节,int类型指针移动4个字节etc.

2.指针的解引用


int main()
{
	int a = 0x11223344;
	char* p = &a;
	/*int* p = &a;*/
	*p = 0;	
	return 0;
}

运行观察p内存变化为:


int main()
{
	int a = 0x11223344;
	int* p = &a;
	*p = 0;	
	return 0;
}

运行结果为:

所以指针的类型决定了对指针的解引用可以操作几个字节。char类型是一个字节,int类型是四个字节。

D.二级指针:指向一级指针的地址

指针表达式解析

char ch = 'a';
char *cp = &ch;

E.判断下面代码是否可以做左值,右值?

左值:空间,右值:内容。

该代码表示cp存储ch的地址,ch内容为‘a’。

&ch: &ch是地址常量,不能做左值,可以做右值

cp:cp是变量,可以做左值也可做右值

&cp:&cp是地址常量,不能做左值,可以做右值

*cp+1:*cp+1表达式是常量,常量‘b’,不能做左值,但是可以做右值

*(cp+1):*(cp+1)表示ch之后的一块空间,可以做左值也可以做右值

++cp:c语言中的变量前置++不能作为左值,可以做右值(c++可以)

cp++:c语言中的变量前置++不能作为左值,可以做右值(c++不可以)

*++cp: 是ch的下一块空间,可以做左值,也可以做右值(++优先级比*高)

*cp++:可以做左值也可以做右值

++*cp:不能做左值,可以做右值(b)

(*cp)++:不能做左值,可以做右值(a)

++*++cp:不能做左值,可以做右值

++*cp++:不能做左值,可以做右值(b)

猜你喜欢

转载自blog.csdn.net/weixin_41892460/article/details/82386361