1.指针及指针变量概念
指针是泛指的一种数据类型,如int指针,double指针,char指针等等。指针是指的程序数据在内存中的地址,指针变量是指的保存程序数据在内存中的地址信息的变量。
例如指针变量p存储x的内存地址,则是指针p指向了x,即指针变量p的值为x的地址,而指针变量p也有自己的地址,即指针的指针。
2.指针变量的定义
c语言中指针变量通过在定义的数据类型后加*来定义,eg:int* p。指针变量会使具有同样值的变量具有能够区分的东西,因为每一个变量存放的内存地址都不一样,所以即使两个变量值相同,其地址也不相同。
char c = 'a'; int a = 97; //定义一个整型变量 int *p; //定义一个整型指针变量 int arr[3]; //定义一个包含3个int的整型数组 int (*parr)[3]; //定义一个包含3个整型指针变量的整型指针数组
*p是指针指向的内存地址所存放的内容,p是指针变量的值,即该数据的内存地址。eg:*p = 1可以用来整型指针变量p所指向的内存地址所存放的值,从而改变指针指向的变量的值。
#include <stdio.h>
#include <stdlib.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main()
{
int *p;
int a = 1;
p = &a;
*p = 2;
printf("%d\n",a);
printf("%d\n",*p);//输出指针变量指向的内存地址所存放的值
printf("%p\n",p); //输出指针指向的内存地址
int *h = (int*)a;//将a的值强制转换为内存地址的值
printf("%d",h);
}
3.指针与数组
对于一维指针而言,如int a[10]中a实际数据类型为int *,其是指向的数组的首地址,但我们不能对a进行a++或a--等,故我们一般会定义一个int *p=a的指针变量p来指向该数组的首地址,从而可以实现对地址的加减。int *p = a = &a[0] p+i = &a[i]
对于多维数组而言,如int a[i][j][k]中a的数据类型为int(*)[j][k],即
a[i][j][k] = *(a[i][j]+k) = *(*(a[i]+j)+k) = *(* (*(a+i)+j)+k)
int m[2][3][4];
int (*s)[3][4] = m;
***(s+1) = 1; //*(*(*(s+i)+j)+k)
printf("%d",m[1][0][0]);
4.指针与函数
函数里通过输入指针参数可以使多个函数访问该指针所指向的对象,而不用把该对象定义为全局变量;使用指针参数输入函数可以使函数能够改变实际参数的值,不使用指针参数其函数输入的为形参,不能改变实际参数的值。
函数中定义函数返回指针函数即在定义函数返回的数据类型后加*,如int* adddfe(int s),其返回的为整型指针变量。
(此为基础知识,后续可能更新)