关于C语言的若干问题,请教~~~

来源:百度知道 编辑:UC知道 时间:2024/09/19 16:32:46
1、char *str="china"与char *str str="china"中,"china"指的是字母c的地址?
2、char str[10];
scanf("%s",str);scanf里面的str不是应该指的是数组中第一个元素的地址?为什么这样写正确?
3、char str[10],*ptr;
ptr=str;
scanf("%s",ptr);此时ptr的长度必须和str相同?
4、若str是一个数组名,*str=str[0],这个写法对吗,数组名可以看做一个指针?
5、除了数组名以外还有其他指针常量吗?
6、什么情况下在定义指针变量时要写上NULL,例int *p=NULL;
7、若定义int *p,解释一下p+1
8、什么是单目运算符
9、函数中return后面什么时候用(),什么时候不用
10、用const修饰除了内容不能改变外,地址能否改变?
11、定义函数时()里用数组作形参时可否写上数组长度,比如findmax(int a[10])对不对
12、若数组元素a[0]是短整型,则它的地址为1002 1003还是1002?
13、书上说用数组名作函数形参的函数体内部,是可以对该声明为形参的数组名进行和指针变量一样的自增自减运算的,若str是数组名,则在函数体内部,它可以写作str++?
非常感谢~~!!!
第三个问题如果char str[10],*ptr;
ptr=str;
scanf("%s",ptr);能否输入大于10个字符的字符串?

1、不是。是整个字符串的地址。语句最好写成:
const char *str="china";

2、因为数组名代表了一个数组的首地址。而且,&str[0] str的值是一样的。

3、不是必须的,只要是同类型的、或者可类型转换的指针变量都可以。

4、错误。因为数组名是常量,不能当作lvalue使用。

5、有。比如常量字符串,其本身就是一个指针——指向它自己。例如,"abc"[0]的结果是'a'

6、这是行业规范,不写NULL没有错。虽然你可以不这么做,但是老板可能会炒鱿鱼。

7、指向p的下一个位置。比如p的值是0x0023,那么p+1的值可能是0x0027。记住,不是加上1,是加上1*sizeof(int)

8、只需要一个操作数的运算符。

9、可以不用括号,这取决于您的习惯,或者老板的要求。

10、你说的话意思不大清楚,请描述清楚写。最好举个例子。

11、不对。但是你可以这么写(仅针对C99): findmax(int n, int a[n])

12、这不一定,但一般来说,编译器在编译时会作内存边界对齐。如果 sizeof(short)是2的话,a[0]的地址可能是1002,不会是1003。

13、可以。因为数组名在函数参数传递过程中,“退化”成了指针。因此,如果你再使用 sizeof(str)的话,就不是整个str数组的大小了,而是这个指针变量所占的内存大小。

1."china是字符串,也就是一个字符指针,也就是字符串第一个字符的地址
2.数组名就是数组的首地址,也就是第一个元素的地址
3.ptr是指针,str是数组,他们不能比较长度,请认真阅读指针相关知识
4.字符数组名就是字符指针
5.你可以用const定义常量指针
6.推荐在任何时候都这样写。
7.type *p;那么p+n = (type *)((char *)p+(n*sizeof(type