有关sizeof strlen typedef define的面试题
2015-09-04 14:35
316 查看
对字符串进行sizeof操作的时候,会把字符串的结束符“\0”计算进去的,进行strlen操作求字符串的长度的时候,不计算\0的。
数组作为函数参数传递的时候,已经退化为指针了,Func函数的参数str_arg只是表示一个指针,那个100不起任何作用的。
下面程序的输出结果为多少?
输出结果为:6 5 4 4
对字符串进行sizeof操作的时候,会把字符串的结束符“\0”计算进去的,进行strlen操作求字符串的长度的时候,不计算\0的。
数组作为函数参数传递的时候,已经退化为指针了,Func函数的参数str_arg只是表示一个指针,那个100不起任何作用的。
2.typedef char *String_t; 和 #define String_d char * 这两句在使用上有什么区别?
答:typedef char *String_t 定义了一个新的类型别名,有类型检查。而#define String_d char * 只是做了个简单的替换,无类型检查,前者在编译的时候处理,后者在预编译的时候处理。
同时定义多个变量的时候有区别,主要区别在于这种使用方式String_t a,b; String_d c,d; a,b ,c都是char*类型,而d为char类型
由于typedef还要做类型检查。。#define没有。。所以typedef比#define安全。。
本文转载自:/article/2722270.html
数组作为函数参数传递的时候,已经退化为指针了,Func函数的参数str_arg只是表示一个指针,那个100不起任何作用的。
下面程序的输出结果为多少?
void Func(char str_arg[100]) { printf("%d\n",sizeof(str_arg)); } int main(void) { char str[]="Hello"; printf("%d\n",sizeof(str)); printf("%d\n",strlen(str)); char *p = str; printf("%d\n",sizeof(p)); Func(str); }
输出结果为:6 5 4 4
对字符串进行sizeof操作的时候,会把字符串的结束符“\0”计算进去的,进行strlen操作求字符串的长度的时候,不计算\0的。
数组作为函数参数传递的时候,已经退化为指针了,Func函数的参数str_arg只是表示一个指针,那个100不起任何作用的。
2.typedef char *String_t; 和 #define String_d char * 这两句在使用上有什么区别?
答:typedef char *String_t 定义了一个新的类型别名,有类型检查。而#define String_d char * 只是做了个简单的替换,无类型检查,前者在编译的时候处理,后者在预编译的时候处理。
同时定义多个变量的时候有区别,主要区别在于这种使用方式String_t a,b; String_d c,d; a,b ,c都是char*类型,而d为char类型
由于typedef还要做类型检查。。#define没有。。所以typedef比#define安全。。
本文转载自:/article/2722270.html
相关文章推荐
- 黑马程序员 JAVA基础学习日记五——封装 继承 多态
- JAVA多线程面试
- 【IT面经】献给正在找工作的程序员
- 一道面试题:1和2的数字序列
- 黑马程序员[andriod]java基础学习日记四——面向对象的总结
- 黑马程序员【andriod】JAVA基础学习笔记三——JAVA的几种引用学习总结
- 面试题 多线程安全队列的实现(改进版)
- [面试技巧]16个经典面试问题回答思路
- [面试技巧]16个经典面试问题回答思路
- iOS 面试题之多线程是什么?
- 面试题:描述一下C程序的编译过程
- 一线城市税前年入50w普遍是怎样一种生活状态
- 黑马程序员——44,多线程
- 黑马程序员【android】Java的数据类型的学习笔记二
- 黑马程序员[android]我的java基础学习日记一
- 面试题———关于将一个整型数组中的所有元素组合成一个数字,并找出最小一个。
- 《招聘一个靠谱的iOS》面试题参考答案(下)
- 《招聘一个靠谱的iOS》面试题参考答案(上)
- javaSE基础编程——字符串面试题(找出一个带多个下划线的字符串中第二个字符串后的字符)
- Java常用排序算法/程序员必须掌握的8大排序算法