// funA 的参数 描述
void funB(const void *str ){ }
// 参数str 是一个 常量指针 和 无类型指针
// 常量指针 概念是 : 你不能通过这个指针去修改 这个地址中的数据 , 不过可以 通过 本身的地址去修改 如:
int a = 6 ;
const int *b = &a ;
*b = 3 ; // 错误 不能通过常量指针去更新地址内保存的数据
a = 4 ; // 正确 不影响 a 变量正常赋值 ,
// 无类型指针 概念是: 我们都知道指针本身是一种数据类型 , 我们如果用int 来修饰 就表明这个指针指向的是 int 类型的数据
// 如果用 void 来修饰就是表明这个指针指向的数据类型不确定 , 那么意义在于 ,例子:
char str[] = "abcdefgh"; //
char *pchar = str ;
int *pint = (int *)str; //将 str 类型的指针转换成 int 类型的
printf(" char 类型的指针 +1 的地址:%p \n" , (pchar + 1)); // char 类型的指针 +1 指针跳跃了 1个字节
printf(" char 类型的指针 +1 的地址内保存的字符:%c \n" , *(pchar + 1));
printf(" 字符数组 str[1] 的地址:%p \n" , &str[1]);
printf(" 字符数组 str[1] 保存的字符:%c \n" , str[1]);
printf(" int 类型的指针 +1 的地址:%p \n" , (pint + 1)); // int 类型的指针 +1 指针跳跃了 4个字节
printf(" int 类型的指针 +1 的地址内保存的字符:%c \n" , *(pint + 1));
printf(" 字符数组 str[4] 的地址:%p \n" , &str[4]);
printf(" 字符数组 str[4] 保存的字符:%c \n" , str[4]);
// 输出:
// char 类型的指针 +1 的地址:0061ff0c
// char 类型的指针 +1 的地址内保存的字符:b
// 字符数组 str[1] 的地址:0061ff0c
// 字符数组 str[1] 保存的字符:b
// int 类型的指针 +1 的地址:0061ff0f
// int 类型的指针 +1 的地址内保存的字符:e
// 字符数组 str[4] 的地址:0061ff0f
// 字符数组 str[4] 保存的字符:e
// 总结:指针的类型 代表着指针+1的跳跃的字节 , 数据类型是几个字节 ,就跳跃几个字节
// char + 1 跳跃 sizeof(char) == 1 个字节
// int + 1 跳跃 sizeof(int) == 4个字节
// float + 1 跳跃 sizeof(float) == 4个字节
// double + 1 跳跃 sizeof(double) == 8个字节
// funB 的参数 描述
void funB(int (*compare)(void * ,void *)){ }
// 参数compare 是一个指针类型的参数
// 指向的函数, 返回值是int类型的, 这个函数 有两个 无类型 指针参数
C 中 函数参数的笔记
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 在 C++ 中,定义函数的时候,可以让最右边的连续若干个参数有缺省值。 例如: 函数参数的缺省值可以提高软件的可扩...
- 第六章:函数(function) 6.4 inout参数和可变方法(inout parameter and mut...
- 错误处理 Error Handling 8.5 错误和函数参数 Errors and Function Param...
- 函数重载 定义1、函数名相同2、参数个数不同,参数类型不同,参数顺序不同 代码实例如下: //1调用函数//a//...
- 第八章:错误处理 8.2 抛出和捕获 本小节主要讲了概念do catch throws 相关的东西 先想想我们在上...