C语言内存分配详解14
作用于上只将其当指针看,一个指针为4个字节,因此返回4。
————————————————-
4. main()
{
int a[5]={1,2,3,4,5};
printf("%d,%d",*(a+1),*(ptr-1));
}
输出结果是什么?
答案:输出:2,5
*(a+1)就是a[1],*(ptr-1)就是a[4],执行结果是2,5
个int)
原因如下:
而指针加1要根据指针类型加上一定的值,不同类型的指针+1之后增加的大小不同。
a是长度为5的int数组指针,所以要加 5*sizeof(int)
所以ptr实际是a[5]
所以prt-1只会减去sizeof(int*)
——————————————–
5. 请问以下代码有什么问题:
int main()
{
char a;
strcpy(str,"hello");
printf(str);
return 0;
}
答案:没有为str分配内存空间,将会发生异常。问题出在将一个字符串复制进一个字符变
量指针所指地址。虽然可以正确输出结果,但因为越界进行内在读写而导致程序崩溃。
———————————————
6. char* s="AAA";
printf("%s",s);
s[0]='B';
printf("%s",s);
有什么错?
答案:
"AAA"是字符串常量。s是指针,指向这个字符串常量,所以声明s的时候就有问题。
cosnt char* s="AAA";
然后又因为是常量,所以对是s[0]的赋值操作是不合法的。
———————————————
7. int (*s[10])(int) 表示的是什么?
答案:int (*s[10])(int) 函数指针数组,每个指针指向一个int func(int param)的函数。
———————————————
8. 有以下表达式:
int a=248; b=4;
int const c=21;
请问下列表达式哪些会被编译器禁止?为什么?
答案:
*c 这是个什么东东,禁止
*d 说了是const, 禁止
——————————————
void getmemory(char *p)
{
p=(char *) malloc(100);
strcpy(p,"hello world");
}
int main( )
{
char *str=NULL;
getmemory(str);
声明: 除非转自他站(如有侵权,请联系处理)外,本文采用 BY-NC-SA 协议进行授权 | 智乐兔
转载请注明:转自《C语言内存分配详解14》
本文地址:https://www.zhiletu.com/archives-658.html
关注公众号:
微信赞赏支付宝赞赏