分类目录归档:c/c++

char类型的指针构成的数组与指向多维数组的指针

我们知道 指向二维数组的指针 我们可以用 int (* pz)[2] 表示 //pz指向包含两个int值的数组
如果我们这样声明 int * pz[2] ; 表示pz是由两个指向int值的指针构成的数组,这种声明会创建两个指向单个int值的指针
这里我们主要来看char类型的这两种区别

我们发现 这个string可以用二维数组的形式来表达 尽管它没有被定义成一个二维数组
看到这 我以为它就是定义指向二维数组的指针的方法 但是书上明明说 是要用 char(* pz)[2]来定义
于是我写了一段代码来尝试解读这两种方法到底有什么区别

报错:
error C2440: '=' : cannot convert from 'char [3][7]' to 'char *[3]'
There is no context in which this conversion is possible

突然我恍然大悟 str2是不能被复制的 上面的string虽然也代表一个地址 但是和str1有着本质的区别
str1是一个指针变量 但是str2 string不过是一个数组名而已!!!
就像二维数组的数组名一样 虽然可以进行类似的偏移寻址操作 但是不能给数组名赋值!数组名只代表一个地址 如是而已。
我们可以这样操作

VC6.0的一个小问题:please enter the path for DBGHEAP.C

编了一个小程序,里面用到了malloc函数,编译通过,但是单步运行到malloc函数时再F11就出现一个find source对话框,显示please enter the path for DBGHEAP.C。然后点ok就到了汇编代码,网上找了找发现是个小问题:

单步运行到malloc函数时再F11,调试器试图进入malloc函数内部,malloc库函数没有提供源代码,所以调试程序希望您告诉它源文件在哪里。 实际上程序没有问题。(其他库函数也一样,比如realloc和exit)。
您可以:
(1)在这里按F10,而不是F11来跳过。
(2)选择“忽略”或者“取消”等,
调试器会显示汇编代码(因为它找不到DBGHEAP.c),
然后就可以继续调试了。