定义指针变量
类型名 *指针变量名
char *pa;//定义一个指向字符型的指针变量
int *pa//定义一个指向整型的指针变量
如果需要获取某个变量的地址,可以使用取地址运算符(&)
char *pa = &a;
int *pa = &f;
如果需要访问指针变量指向的数据,可以使用取值运算符(*)
printf("%c,%d",*pa,*pb);
举例
#include <stdio.h>
#include<string.h>
#include<Windows.h>
#pragma warning(disable:4996)
int main()
{
char a = 'F';
int f = 123;
char *pa = &a;
int *pb = &f;
//指针指向
printf("a = %c\n", *pa);
printf("f = %d\n", *pb);
*pa = 'C';//改变指针变量
*pb += 1;
//改变指针变量
printf("now,a = %c\n", *pa);
printf("now,f = %d\n", *pb);
printf("sizeof pa = %d\n", sizeof(pa));
//求长度的话与指针指向的类型无管,都是int类型
printf("sizeof pb = %d\n", sizeof(pb));
printf("the addr of a is: %p\n", pa);
printf("the addr of a is: %p\n", pb);
//%p表示打印地址类型的数据
system("pause");
return 0;
}
避免访问未初始化的指针
数组名是数组第一个元素的地址
指向数组的指针
用一个指针指向数组,只需要用指针指向数组的第一个元素
char *p;
p = &a[0];
对比标准的下标法访问数组元素,这种使用指针进行间接访问的方法叫做指针法。
对指针变量进行加减运算,相当于指向距离指针所在位置的向前或向后第N个元素
p+1并不是简单的将地址加1,而是指向数组的下一个元素。
例
#include <stdio.h>
#include<string.h>
#include<Windows.h>
#pragma warning(disable:4996)
int main()
{
char a[]= "Onucat";
char *p = a;
printf("*p = %c,*(p+1) = %c,*(p+2) = %c\n", *p, *(p + 1), *(p + 2));
// 结果: *p = O,*(p+1) = n,*(p+2) = u
system("pause");
return 0;
}
用指针来代替数组
#include <stdio.h>
#include<string.h>
#include<Windows.h>
#pragma warning(disable:4996)
int main()
{
char *str = "i love Onucat";
//*str为指针,定义一串字符串
int i, Length;
Length = strlen(str);
//求出str长度
for (i = 0; i < Length; i++) {
printf("%c", str[i]);
//循环length的长度输出字符串
}
printf("\n");
system("pause");
return 0;
}