指针笔记

指针:是一个存储计算机内存地址的变量

指针取值:从指针指向的内存读取数据

操作符 * :既可以用来声明一个指针变量,亦可用作指针的取值。当用在声明一个变量时,*表示这声明了一个指针。其他情况用到*表示指针的取值。

地址操作符 & :用来引用一个内存地址。通过在变量名字前使用&操作符,可得到该变量的内存地址

//声明一个int指针
int * p;
//声明一个int值
int val = 20;
//为指针分配一个int值的引用
p = & val;
//对指针取值
int i = *p;
printf("%d\n",i);


对指针变量赋值时需要注意:

(1)指针变量中只能存放地址。不要将一个数值赋给一个指针变量,如 int *ipPointer = 10,编译将出错。
(2)赋给指针变量的变量地址类型要与定义指针变量的类型一致。

int iValue = 5;
float *ipPointer;
ipPointer = &iValue;//非法。有的编译器报错,有的没有

指针变量作为函数参数:
  (1)作用是将一个变量的地址传递给另一个函数参数
  (2)若函数形参是指针时,函数实参要么是指向变量的指针,要么是变量的地址。

void F(int *pointer1, int *pointer2)
{ 
... 
}
1)F(&A,&B);
2)
int * P, *Q;
int p = 1,q = 2;
P = &p;
Q = &q;
F(P,Q);//F(p,q)是错误的

指针与数组
  在C语言中,数组名代表数组中首元素的地址。
  int array[100];
  int *point;
  point = array;
  point = array[0];

point = array与point = array[0]等价。


指针与多维数组
#include <stdio.h>


int main()
{
int a[3][4] =
{
{1,2,3,4},
{5,6,7,8},
{9,10,11,12}
};


int *p = NULL;


p = a;
printf("a=%d\n",*p);


p = a[0];
printf("a[0]=%d\n",*p);


p = &a[0];
printf("&a[0]=%d\n",*p);


p = &a[0][0];
printf("&a[0][0]=%d\n",*p);


p = a[1];
printf("a[1]=%d\n",*p);


p = a[2];
printf("a[2]=%d\n",*p);


p = &a[0]+1;
printf("&a[0]+1=%d\n",*p);


p = a[0]+1;
printf("a[0]+1=%d\n",*p);


printf("&a[0]+1=%d\n",&a[0]+1);
printf("a[0]+1=%d\n",a[0]+1);


p = a+1;
printf("a+1=%d\n",*p);
return 0;
}

在C程序中,可以用两种方法访问一个字符串
(1)用字符数组存放一个字符串
(2)用字符指针指向一个字符串
#include <stdio.h>
int main()
{
char str[] = "Hello!";
char *p = "Hi!";
printf("%s\n",str);
printf("%s\n",p);
return 0;
}

指针与常量

	int a = 7;
    int b = 8;
    
    const int ci1 = 2;//常量
	int const ci2 = 2;//常量
	
	const int *i1 = &a;//指向常量的非常量指针,即指针变量可以赋值为任意int型,但不能通过*i1来修改所指向的值
	
	int *const i2 = &a;//指向非常量的常量指针,即指针变量不能修改,指针所指向的内容可以任意int值 
	
	int *i3 = &b;//指向非常量的非常量指针,即常用指针 
	
	const int *const i5 = &a;//指向常量的常量指针








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值