C语言指针基本概念及其指针变量的定义是啥

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言指针基本概念及其指针变量的定义是啥相关的知识,希望对你有一定的参考价值。

语言中,指针是一种类型,被称为“指针类型”。指针类型描述的是一个地址,这个地址指向内存中另外一个对象的位置。简单地说,指针表示的是它所指向对象的地址。

1、比较point,*point,&point三者的区别
对于int * point;
point:是指针变量,其内容是地址量。
*point:是指针变量的目标变量,即指针指向的那个变量,其内容是数据。
&point:是指指针变量本身所占据的存储地址。

2、指针与数组
用指针和数组名在访问内存中的数据时,他们的表现形式是等价的,因为他们都是地址量。
数组名表示整个数组的首地址,可以看作是固定地址的指针,不能被赋值。
数组名无须赋初值,而指针在使用前必须赋初值。

3、字符指针和字符串
字符串是一个字符数组,字符串以‘\0’结束。printf函数的%s格式输出字符时,是从给定的地址开始,到遇上第一个‘\0’字符时结束。
对字符指针初始化,是将字符串的首地址赋给指针。
4、指针型函数
所谓指针型函数,即返回值是指针(地址)的函数。
5、多级指针
指向指针的指针(**p)就是二级指针,指向指针的指针的指针(***p)是3级指针。
多级指针类似于间接寻址。
6、指向函数的指针
C语言中的函数名表示函数的首地址,即函数执行的人口地址。
定义形式:[存储类型][数据类型标示符](*指向函数的指针变量名)();
例子: int(*fun)();//指向函数的指针 , int * fun(); //指针型函数,注意(* fun)括号不能少
7、动态指针
当需要一大片内存的时候,最好使用动态分配。
使用malloc函数:void * malloc(size_t size)。
例子:
int * pn=malloc(10*sizeof(int));
double *pd=malloc(10*sizeof(double));
参考技术A 我们知道变量在计算机内是占有一块存贮区域的,变量的值就存放在这块区域之中, 在计算机内部, 通过访问或修改这块区域的内容来访问或修改相应的变量。Turbo C语言中, 对于变量的访问形式之一,就是先求出变量的地址,然后再通过地址对它进行访问,这就是这里所要论述的指针及其指针变量。
所谓变量的指针, 实际上指变量的地址。变量的地址虽然在形式上好象类似于整数, 但在概念上不同于以前介绍过的整数, 它属于一种新的数据类型, 即指针类型。Turbo C中,
一般用指针来指明这样一个表达式&x的类型,而用地址作为它的值,也就是说, 若x为一整型变量, 则表达式&x的类型是指向整数的指针,而它的值是变量x的地址。同样, 若double d;则&d的类型是指向以精度数d的指针,而&d的值是双精度变量d的地址。所以,
指针和地址是用来叙述一个对象的两个方面。虽然&x、&d的值分别是整型变量x和双精度变量d的地址, 但&x、&d的类型是不同的, 一个是指向整型变量x的指针, 而另一个则是指向双精度变量d的指针。在习惯上,很多情况下指针和地址这两个术语混用了。
我们可以用下述方法来定义一个指针类型的变量。
int *ip;
首先说明了它是一指针类型的变量,注意在定义中不要漏写符号*,否则它为一般的整型变量了。另外,在定义中的int 表示该指针变量为指向整型数的指针类型的变量, 有时也可称ip为指向整数的指针。ip是一个变量, 它专门存放整型变量的地址。
指针变量的一般定义为:
类型标识符 *标识符;
其中标识符是指针变量的名字, 标识符前加了*号,表示该变量是指针变量, 而最前面的类型标识符表示该指针变量所指向的变量的类型。一个指针变量只能指向同一种类型的变量, 也就是讲, 我们不能定义一个指针变量, 既能指向一整型变量又能指向双精度变量。
指针变量在定义中允许带初始化项。如:
int i, *ip=&i;
注意, 这里是用&i对ip初始化, 而不是对*ip初始化。和一般变量一样,对于外部或静态指针变量在定义中若不带初始化项, 指针变量被初始化为NULL, 它的值为0。Turbo C中规定, 当指针值为零时, 指针不指向任何有效数据, 有时也称指针为空指针。因此, 当调用一个要返回指针的函数时(以后会讲到), 常使用返回值为NULL来指示函数调用中某些错误情况的发生。
参考技术B 指针是C语言中广泛使用的一种数据类型。
利用指针变量可以表示各种数据结构; 能很方便地使用数组和字符串; 并能象汇编语言一样处理内存地址,从而编出精练而高效的程序。
如:int *p1;表示p1是一个指针变量,它的值是某个整型变量的地址。

基本类型指针变量及其大小

/*
	2022.06.07
	目的:
		强化指针基本概念--各类型指针变量及其大小
	理论:
		1.多字节变量,占多个存储单元,每个存储单元都有地址编号;
		2.c语言规定,存储单元编号最小的那个编号,是多字节变量的地址编号;
		3.无论是什么类型的指针变量,如果是在32的地址总线下,指针变量的大小都为4个字节;
		4.指针只能存放对应类型的变量的地址编号。

	功能:
		测试各类型变量的指针变量大小
*/

#include<stdio.h> 

int main(void)

	char* p1;       /* 字符指针 -- 字符型的数据地址 */
	short int* p2;  /* 短整型指针 */
	int* p3;        /* 整型指针 说明:因为是4个字节,所以每个字节都有一个地址编号,整个变量的地址以地址编号最小的为准 */
	long* p4;       /* 长整型指针 同上*/
	float* p5;      /* float型指针 同上*/
	double* p6;     /* double型指针 同上*/

	printf("zizeof(p1) = %d\\n", sizeof(p1));
	printf("zizeof(p2) = %d\\n", sizeof(p2));
	printf("zizeof(p3) = %d\\n", sizeof(p3));
	printf("zizeof(p4) = %d\\n", sizeof(p4));
	printf("zizeof(p5) = %d\\n", sizeof(p5));
	printf("zizeof(p6) = %d\\n", sizeof(p6));

	return 0;


/*
	程序运行结果:

		zizeof(p1) = 4
		zizeof(p2) = 4
		zizeof(p3) = 4
		zizeof(p4) = 4
		zizeof(p5) = 4
		zizeof(p6) = 4
*/

以上是关于C语言指针基本概念及其指针变量的定义是啥的主要内容,如果未能解决你的问题,请参考以下文章

C语言中“指针”和“指针变量”的区别是啥??

函数指针及其定义和用法,C语言函数指针详解

空指针是啥意思

C语言之指针学习

C语言不允许使用不完整的类型报错是啥意思啊

C语言二维数组指针变量是啥,int (*p)[2]啥意思