- 字符指针变量
- 数组指针变量
- ⼆维数组传参的本质
- 函数指针变量
- 函数指针数组
- 转移表
1.字符指针变量
在指针类型中我们知道有一种指针类型为字符指针char*;
#include<stdio.h>
int main()
{
char ch = 'a';
char* pc = &ch;//pc就是字符指针变量
//字符指针变量是用来存放地址的
const char* p = "abcdefghi";//不是将abcdefghi\o字符串存放到p中,而是将首字符a的地址存储在p中
//"abcdefghi"是一个常量字符串,是不能被修改的
//[abcdefghi\0]
printf("%s", p);
return 0;
}
还有一种使用方式
#include<stdio.h>
int main()
{
const char* pstr = "hello bit.";//这⾥是把⼀个字符串放到pstr指针变量⾥了吗?
printf("%s\n", pstr);
return 0;
}
这里特别容易让同学以为是把字符串hello bit 放到了字符指针pstr里了,但是本质是把字符串hello bit. 首字符的地址放到了pstr 中。
下面我们看一个笔试题
#include <stdio.h>
int main()
{
char str1[] = "hello bit.";
char str2[] = "hello bit.";
const char* str3 = "hello bit.";
const char* str4 = "hello bit.";
if (str1 == str2)
printf("str1 and str2 are same\n");
else
printf("str1 and str2 are not same\n");
if (str3 == str4)
printf("str3 and str4 are same\n");
else
printf("str3 and str4 are not same\n");
return 0;
}
为什么是这个结果呢?
我们来分析一下
str1 str2 存放的是首元素的地址,虽然两个里面内容不同,str1里面存放的内容和str2存放的内容所在的位置是不同的,所以str1!=str2
str3 str4 存放的是常量字符串,是不能被修改的,既然不能被修改,一样的内容,有必要存放两份吗?没有必要
- 数组指针变量
2.1 数组指针变量是什么?
之前我们学习了指针数组,指针数组是⼀种数组,数组中存放的是地址(指针)。
数组指针变量是指针变量?还是数组?
答案是:指针变量。
字符指针 -指向字符的指针,存放的是字符的地址。char ch=‘w’; char *pc=& ch;
整型指针-指向整型的指针,存放的是整型的地址 int n=100; int *p=&n;
数组指针-指向数组的指针,存放的是数组的地址 int arr[10]; int ( *p)[10]=&arr;
指针(3)先到此结束,明天修改