C语言,两个概念性问题请教大家,谢谢了

来源:百度知道 编辑:UC知道 时间:2024/06/07 10:34:49
下列说法中不正确的是
A 指针是一个变量 B 指针中存放的是地址值 C 指针可以进行加,减等算术运算 D 指针变量不占用存储空间

我觉得ACD 都有错误 A指针应该是一个地址 C 指针不可以进行加法运算 D 指针变量占存储空间?

可答案是D 但我感觉是指针变量不占用存储空间

55.以下能正确进行字符串赋值,赋初值的语句组是
A.char s[5]={‘a’,’b’,’c’,’d’,’e’};
B char*s;s=”abcde”;
C char s[5]=”abcde”;
D char s[5];s=” abcde”;

答案是B 拉,可是我觉得AC也对啊,大家说说AC错哪了啊

第一题
A 指针是一个变量 错 指针其实就是地址 是常量
B 指针中存放的是地址值 错 指针变量中存放的是地址值
C 指针可以进行加,减等算术运算 错 应该是不能进行加法运算的
D 指针变量不占用存储空间 错 变量是占存储空间的

第二题
A.char s[5]={‘a’,’b’,’c’,’d’,’e’}; 应该是对的
B char*s;s=”abcde”; 对
C char s[5]=”abcde”;错 字符串是以\0结束的 而s[5]少了一个s[6]才能装下“abcde”
D char s[5];s=” abcde”; 错 数组名是地址常量 常量是不能被赋值的

第一题:
指针是指一个变量的地址,而不是一个变量,因此a错,指针本身就是一个地址值,存放地址值的变量叫指针变量,因此b错,指针是一个很抽象的东西,仅仅是一个变量地址的代名词,而指针变量是存放指针的变量,可以合法的进行算术,赋值操作..
ps:我们平时所说的指针运算其实指的是指针变量运算..而不是这里这么严格意义上的指针..
根据上述定义,指针时不会占用存储空间的,存放指针的指针变量才会占用存储空间..因此d是正确的..
这道题是让你区分指针和指针变量的严格区别的..

第二题:
A和C都出现了数组下标越界..因为在开辟数组时,只开辟了5个单位的内存,字符串在结尾处系统会自动补上一个‘\0’,以表示字符串的结束.这样的话需要占用6个内存:
char s[6]={'a','b','c','d','e'}
最好自己养成好习惯,在定义字符串时,自己加上'\0':
char s[6]={'a','b','c','d','e',‘\0’}

你能知道B是正确的,就可以推出D是错的了,能存放地址值勤的话,能不占存储空间吗? B 和D是矛盾的
指针