指向C中的字符串?

char *ptrChar; 

我知道ptrChar是指向char的指针。 指向字符串的命令是什么?

编辑:如果它是相同的(ptr到char与ptr到字符串) – 下面的变量定义代表什么?

 char (*ptr)[N]; 

我糊涂了。

相同的表示法用于指向单个字符或以空字符结尾的字符串的第一个字符:

 char c = 'Z'; char a[] = "Hello world"; char *ptr1 = &c; char *ptr2 = a; // Points to the 'H' of "Hello world" char *ptr3 = &a[0]; // Also points to the 'H' of "Hello world" char *ptr4 = &a[6]; // Points to the 'w' of "world" char *ptr5 = a + 6; // Also points to the 'w' of "world" 

ptr2ptr3中的值是相同的; ptr4ptr5中的值ptr4 ptr5 。 如果您要将某些数据视为字符串,请务必确保它是空终止的,并且您知道有多少空间可供您使用。 许多问题是由于不了解可用空间而不知道字符串是否正确无效终止而引起的。

请注意,上面的所有指针都可以取消引用,就好像它们是一个数组:

  *ptr1 == 'Z' ptr1[0] == 'Z' *ptr2 == 'H' ptr2[0] == 'H' ptr2[4] == 'o' *ptr4 == 'w' ptr4[0] == 'w' ptr4[4] == 'd' ptr5[0] == ptr3[6] *(ptr5+0) == *(ptr3+6) 

迟到的问题

char (*ptr)[N]; 代表?

这是一个更复杂的野兽。 它是指向N字符数组的指针。 类型是完全不同的; 它的使用方式是完全不同的; 指向的对象的大小是完全不同的。

 char (*ptr)[12] = &a; (*ptr)[0] == 'H' (*ptr)[6] == 'w' *(*ptr + 6) == 'w' 

请注意, ptr + 1指向未定义的区域,但指向超出a开头的“一个12字节数组”。 鉴于情况略有不同:

 char b[3][12] = { "Hello world", "Farewell", "Au revoir" }; char (*pb)[12] = &b[0]; 

现在:

 (*(pb+0))[0] == 'H' (*(pb+1))[0] == 'F' (*(pb+2))[5] == 'v' 

你可能不会遇到指向arrays的指针,除非偶然发生了很长一段时间; 在过去的25年里,我已经使用过几次了,但是我很少能用一只手的手指来计算它们(其中一些已经在Stack Overflow上回答了问题)。 除了知道它们存在之外,它们是获取数组地址的结果,并且您可能不想要它,您实际上并不需要了解有关数组指针的更多信息。

同样的。 AC字符串只是一个字符数组,因此指向字符串的指针是指向字符数组的指针。 指向数组的指针与指向其第一个元素的指针非常相似。

字符串基本上是从指向它的地方( char *ptrChar; )到空字符( \0 )。

char *ptrChar; 实际上指向字符串的开头(char数组),因此这是指向该字符串的指针,所以当你喜欢ptrChar[x] ,你实际上在char开始后x次访问内存位置(又名从ptrChar指向的地方)。

AC字符串只是一个字符数组,因此指向字符串的指针是指向字符数组的指针。 指向数组的指针与指向其第一个元素的指针非常相似。 字符串基本上是从指向它的地方(char * ptrChar;)到空字符(\ 0)。