指针的基本用法

1、地址->内存字节单元的编号:
冯诺伊曼观点:存储程序思想,即所有信息(软件和硬件)必须建立内存映像才能被程序使用

逻辑地址:虚拟地址,在程序中使用&取得的变量的地址属于逻辑地址

物理地址:程序运行时所占物理内存为地址,对于用户而言不可见

2、指针:用于存放地址的变量,是无符号整型;
指针的类型:指针所指的变量的类型;

int a[4];
int*pt;
pt=a;

a为指针常量
指针的运算

*pt——>通过指针指向变量的内容
 pt——>&变量;&求地址
#include<stdio.h>
int main(){
	int a,*pta;
	float b;
	float *ptb;
	pta=&a;
	a=100;
	printf("0:a=%d\n",a);
	*pta=*pta+100;
	printf("1:a=%d\n",a);
	ptb=&b;
	*ptb=12.3;
	printf("b=%f\n",b);
	return 0;
}

指针与一维数组

#include<stdio.h>
int main(){
	int a[10]={0,1,2,3};
	int*pt;
	int i;
	for(pt=a,i=0;pt<=&a[9];pt++,i++){
		printf("%d:%d\n",i,*pt);
	}
	return 0;
}
pt=a等价pt=&a[0]

3、指针使用注意事项:防止指针越界访问的问题

1、指针定义后一定要初始化
2、指针一定要指向对应类型的变量
3、指针与数组连用时,一定要防止越界使用
4、指针+/-1表示指针向下或向上拨动一个元素
5、同类型的指针-指针,结果为两指针间的元素个数

4、二级指针
指针本身是变量,指针也占有内存地址,占用4B
因此,指针的也可以被保存----存放指针地址的变量即二级指针

int a;
int *pt;
int **ppt;
pt=&a;
ppt=&pt;

指针数组:为一个数组,数组中有10个元素,每个元素为T类型的指针

T*a[10]

通过字符指针数组只能对字符串进行读操作、不能写,在下面数组中存放的都是字符串的首地址

#include<stdio.h>
int main(){
	char*str[3]={
		"learning",
		"学习",
		"C language"
	}
	printf("%s\n%s\n%s\n",str[])
}
int a=99,b=65,c=89;
int *arr[3]={&a,&b,&c};
int **parr=arr;
printf("%d,%d,%d\n",*arr[0],*arr[1],*arr[2]);
printf("%d,%d,%d\n",**(parr+0),**(parr+1),**(parr+2));

数组指针(与二维数组一起使用)

T(*pt)[10];
pt 是一个指针,指向一个含有10个T类型元素的数组
pt+1将跳过一行,即跳过一个含有10个T类元素的数组
int a[3][4];

二维数组的数组名等于行首地址

5、字符指针、字符数组与字符串

char *pt="abdcc";

将"abdcc"的首地址赋值给pt,由于系统以常量方式来处理"abdcc",故通过字符指针pt仅仅可以对该字符串进行读操作,不能进行写操作

char str[]="abdcc";

将"abdcc"整个拷贝给变量字符数组str,因此通过str可以修改该字符串的内容。由于,str为数组名,即为指针常量,对它的初始化只能在定义时完成

6、带参数的main函数

int main(int argc,char*argv[])
{
}
char*argv[]运行时,命令函数组
int argc;命令行参数个数

二级指针
指针是存放变量地址的变量,例如int, doouble ,char等也可以指向一份指针类型的数据,例如int*,char*,double*
如果一个指针指向的是另外一个指针,我们就称它为二级指针,或者指向指针的指针,

  • 5
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值