指针是C语言的一种数据类型,指的是内存单元的地址。
指针变量:专门存放指针内存地址的变量。 包含指向的数据类型
变量访问的两种方式:
直接访问:& scanf("%d",&b) &取地址运算符
简介访问:* *p *指针运算符,间接访问运算符 解引用运算符
指针变量的运算
赋值运算
1.指针变量的值赋予相同类型指针变量
#include <stdio.h>
int main(){
int a = 10, *pa = &a, *pb;
printf("%d \n",*pa);
printf("%d \n",pa);
pb = pa;
printf("%d \n",pb);
return 0;
}
结果:
10
6422028
6422028
[Finished in 410ms]
2.把数组的首地址赋予同类型变量指针
int c[5]={1, 2, 3, 4, 5}, *pc, i;
for(i=0;i<5;i++){
printf("%d >>> %d \n",i,c[i]);
}
pc = c; // or pb = b[0]
printf("%d \n",pc);
printf("%d \n",*pc);
printf("%d \n",*pc+2);
结果:
0 >>> 1
1 >>> 2
2 >>> 3
3 >>> 4
4 >>> 5
6422000
1
3
[Finished in 561ms]
3.把字符串首地址赋予同类型的指针变量
char *pd;
pd = "Hello, World!";
char *pe = "Hello";
// 输出 pd 指向的字符串
printf("%s \n",pd);
// 输出 pd 的地址
printf("%d \n",pd);
// 输出 pe 的字符串
printf("%s \n",pe);
// 输出 pe 指向的字符串的第一个字符的 ASCII 值
printf("%d \n",*pe);
结果:
Hello, World!
4210688
Hello
72
[Finished in 530ms]
实际上,`pd` 的值是一个内存地址,而不是字符串本身。在C语言中,字符串常量在内存中是以字符数组的形式存储的,而指针变量 `pd` 只是存储了字符串常量的起始地址。
当您使用 `printf("%s \n", pd);` 时,`printf` 函数会根据 `%s` 格式说明符去 `pd` 所指向的内存地址中寻找以 null 结尾的字符序列,并输出该序列。因为 `pd` 指向了字符串常量 "Hello, World!" 的起始地址,所以 `printf` 函数会从该地址开始输出字符,直到遇到 null 字符为止,这样就输出了整个字符串 "Hello, World!"。
虽然 `pd` 的值本身只是一个地址,但是在 `printf` 函数中,使用 `%s` 格式说明符会根据该地址找到相应的字符串并输出。