若有定义语句:char s[3][10],(*k)[3],*p;则以下赋值语句正确的是: A、p=s; B、p=k; C、 p=S[0] D、k=s

答案是C,我想知道其他3个答案为什么是错误的!!求详尽解释~~,谢谢各位了!

首先说 指针数组和数组指针。

数组指针 char (*k)[3];
数组指针 char s[3][10] *(p[3]) p[3]存储的都是char*指针。
p*是普通的char指针

所以 p=s[0]正确追问

我没看懂你想表达的是什么?可能我的水平有限!!

追答

p=s; s+1一次移动的是10个字节,p+1一次移动1个字节
p=k; 与上同理。
k=s k+1一次移动3个字节 ,s+1个字节
例子:
//逐步取消注释 运行。
#include
using namespace std;
int main()
{
char s[3][10]={{"abc"},{"cde"}},(*k)[3],*p;
char g[3]={'s','a','\0'};
k = &g;
p = g;
//p = &s[0][0];与p=s[0]同理 这里不要取消注释。

//测试p
//cout << p << endl;
//cout << p+1 << endl;
//cout << p+2 << endl;

//测试(*k)[3]
//cout << k << " " << &g<< endl;
//cout << k+1 << endl;
//cout << k+2 << endl;
//测试char s[3][10]
//cout << "s="<<s << endl;
//cout << "s="<<s+1 << endl;
//cout << "s="<<s+2 << endl;

}

温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答