C语言指针,以指针访问数组

223 阅读1分钟

指针本质是某内存地址,但对它的解释决定了它所指向的内存是单个数据还是数组

// 常见,只表现成一个指针,但实际指向的是数组  
// 指针声明部分
pthread_t* threadIDs;   // 工作的线程ID  

// 指针内存创建部分
pool->threadIDs = (pthread_t*)malloc(sizeof(pthread_t) * max);  

// 按数组的形式来访问内存  
pool->threadIDs++
char ch[20] = {'a', 'b', 'c'};  
char* p_ch = ch;
// 抑或  
char* p_ch = &ch[0];

// 访问 
p_ch++;

上面将指针指向的内存当作数组访问,这不是默认的指针属性,能否将指针按偏移量++访问,取决于当初分配的内存时是分配一块还是数组形式的多块

二级指针和指针数组关系

char* argv[]  // 数组成员是char*指针  
char** argv   // 与上面等效,argv++就是将argc指向的内存按数组访问  

// 再次强调,二级指针不能无条件的解释成,数组成员是一级指针的数组  
// 因为上面(粗体)强调,指针指向的内存能否解释成数组都是有条件的