第一题
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”; 错 数组名是地址常量 常量是不能被赋值的
第一题:指针本身就是一个变量.只是这个变量的值比较特殊.它的值是一个内存地址 所以D才是对的.既然是变量就要占用内存空间.不管它是不是指针都要占.
第二题:题目说的是字符串.C语言中的规定字符串是以空字符(\0)结尾的.所以A虽然可以赋初值.但是不是字符串. 选项C就不用再说了跟A一样的理由.把C换成
char 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’}
第一题:
指针的含义我的理解就是它也是一种数据类型,只不过它存放的是相应类型的地址。其实数组就相当于指针常量。对于A,因为指针可以改变指向,改变指向的含义就是改变指针内所存的地址,例如 int a,b; int *p;
p=&a;//这时指针P存放的地址是A的地址。
p=&b;//这是指针就改变所储存的地址
所以它当然是变量,它要有空间储存地址值。所以D错 它要占用空间去储存 地址。
对于C,当指针指向一个数组时,其实其中存放的是数组这个连续空间的首地址,所以 (好比把数组比作一排,指针的+,-就是移动在这一排上的指向)
第二题:
这是书上的概念,你看看清华大学出版社的 姓谭的那位编的书
有些是常识行东西 ,只要记住知道怎么用就好了 ,其实学编程重要的是实践,你能避免这些错误,不必一定要都知道为什么。
第一题
指针是一个变量,这个变量存储的是一个地址的值,举例说代码中会出现这样的语句 int *p=null;p=(int *)malloc(4*sizeof(int));
她包括了如下过程:声明一个指向整数数组的指针P;对P进行初始化p=null;利用malloc函数向系统申请一个大小为4的存储整数的存储空间并将存储块的首地址赋值给P。
从这个例子不难看出,指针P可以被多次赋值,为变量(A正确),并且赋值内容均为地址值(B),既然指针为变量,那么它必然是占用存储空间的。关于选项C,事实上指针完全是可以作加减运算的,比如说上面的指针P,她赋值为:P[0]=0;P[1]=1;我们可以用表达式*p;和*(P+1)分别取到值0和1,而(P+1)就是对指针进行加法运算的过程
第二题
我楼上的各位已经说得很清楚了,综合一楼和三楼给的解释差不多就是正确答案了