返回目录:https://blog.youkuaiyun.com/chen1083376511/article/details/82723709
+问题:
问:数组与指针的区别?
答:数组是多个元素的集合,在内存中分布在地址相连的单元中,所以通过其下标访问不同单元的元素。指针是一种变量,只不过它的内存单元中保存的是一个标识其他位置的地址。由于地址也是整数,在32位平台下,指针默认为32位。
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
+问题:
问:说说char a1[]=“hello”和char *a2="hello"的区别?
答:
a1是一个数组,定义时开辟了数据内存,把常量“hello”赋值给a1(即拷贝),所以常量占有一块内存,而a1又开辟了一块相等的内存。
a2是一个字符类型的指针,指向一个常量"hello"的地址,仅仅只有常量占有内存,而指针本身占有内存为4个字节。(在32位机器中)
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
问题:
问:下面的输出结果是?
void *fun(char *arr)
{
char *arr2 ="world";
arr = arr2;
return arr;
}
int main()
{
char *ch = "hello";
fun(ch);
cout << ch << endl;
return 0;
}
答:hello
分析:
这道题主要考指针作为形参的知识点,考时容易出错。由于arr是形参,属于局部变量,作用只在fun函数里面,调用函数完了之后,arr就被释放掉了。实参ch指向仍然不会改变指向。
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
问题:
问:下面哪个语句不合法?
char a[10] = {'a'};
char b[10] = { 'b' };
a= b;
答:a=b;语句不合法。因为这里数组名a和b是字符指针类型的(char*),a作为左值时,是不可修改的值。
分析:
当数组名为左值时,它的类型是字符数组;当数组名为右值时,它的数据类型是字符指针。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
问题:
问:下面代码的输出结果是什么?
int pstr(char str[])
{
return (int)(sizeof(str)-1);
}
void main()
{
char a[20] = "Hello world";
printf("%d",pstr(a));
}
答:3
分析:
当用函数传递的数组指针的时候就自动退化为指针了,而指针的长度是4,你减去1自然就是3了.
修改如下:
void main()
{
char a[] = "Hello world";
int len = sizeof(a)-1;
printf("%d",len);
}
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+问题:
问:下面代码输出结果是什么?
void main(void)
{
char *b = "hello";
cout << sizeof(b) << endl;
cout << sizeof(*b) << endl;
}
答:
4 1
分析:sizeof(b) 中b是char*类型的,输出的结果是指针类型的长度。而sizeof(*b) 中的*b是char类型的,长度为1.
cout<<sizeof(char)<<endl;结果是1
cout<<sizeof(int)<<endl;结果是4
cout<<sizeof(unsigned int)<<endl;结果是4
cout<<sizeof(long int)<<endl;结果是4
cout<<sizeof(short int)<<endl;结果是2
cout<<sizeof(float)<<endl;结果是4
cout<<sizeof(double)<<endl;结果是8
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
问题:
问:下面语句的输出结果是什么?