C语言指针及指针变量学习

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),其返回的为整型指针变量。

(此为基础知识,后续可能更新)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值