您的位置首页百科知识

C语言数组指针的具体用法?

C语言数组指针的具体用法?

的有关信息介绍如下:

C语言数组指针的具体用法?

同意楼上!不能定义*d[0],因为这个数组的大小为0!可以这样来#include #include #include int main() { char *d[4]; d[0]=malloc(1*sizeof(char)); strcpy(d[0],"web"); printf("%s",d[0]); return 0; } 此时*d[]为一个指向指针的指针d[0]=malloc(1*sizeof(char));此句话的意思是,分配1个字节的内存空间给d[0],也就意味着d这个数组的第一个元素[0]内保存的是一个1字节空间的地址,因为d[0]指向一个地址!你可以这样理解对于普通的数组(例如 char d[4];),在内存中是这样的变量:内存地址:内容d[0]:0x400000h:'w'd[1]:0x400001h:'e'd[2]:0x400002h:'b'd[3]:0x400003h:'\0'而在此处 char *d[4]; *d[0] = malloc(1*sizeof(char));,是这样的'd[0]:0x400000h:0x400100hd[1]:0x400001h:0x400101hd[2]:0x400002h:0x400102hd[3]:0x400003h:0x400103h而在内存0x400100h处才保存着"web\0"不好意思,我上面说错了,应该是d[0]:0x400000h:0x400100hd[1]:0x400001h:NULLd[2]:0x400002h:NULLd[3]:0x400003h:NULL而在内存0x400100h处0x400100h:'w'0x400101h:'e'0x400102h:'b'0x400103h:'\0'对应的,你的代码执行后,内存变量应该是这样的d[0]:0x400000h:0x400100hd[1]:0x400001h:0x400104hd[2]:0x400002h:0x400108hd[3]:0x400003h:NULL在内存0x400100处:0x400100h:'w'0x400101h:'e'0x400102h:'b'0x400103h:'\0'0x400104h:随机字符......0x400108h:随机字符以上内存地址是以字节方式内存对齐的,用一些编译器编译后可能地址会有些问题(比如d[0]到d[1]不止差了4,可能是8),但总体框架就是这样!