指针是什么?说白了就是存放地址的变量!
#include <stdio.h> #include <unistd.h> #include <fcntl.h> int main(int argc, char* argv[]) { //初始化法一 char buff_first[4] = {'a', 'b', 'c'}; printf("buff_first %s\n", buff_first); buff_first[0] = 'd'; printf("buff_first change %s\n", buff_first); char buff_second[4] = {'a', 'b'}; printf("buff_second %s\n", buff_second); printf("buff_second[2] %s\n", buff_second[2]); printf("buff_second[3] %s\n", buff_second[3]); char buff_third[4] = {'a', '\0', 'b'}; printf("%s\n", buff_third); //初始化法二 char buff_fourth[4] = "ab"; printf("%d\n", strlen(buff_fourth)); //初始化法三 char buff_fifth[4] = {"ab"}; char buff_sixth[] = "abcd"; return 0; }
输出:
buff_first abc
buff_first change dbc
buff_second ab
buff_second[2] (null)
buff_second[3] (null)
a
2
#include <stdio.h> #include <fcntl.h> int main(int argc, char* argv[]) { char* pbuff; pbuff = "abc"; printf("pbuff %s\n", pbuff); printf("字符指针的地址&pbuff %x\n", &pbuff); printf("字符指针所指字符串常量的首地址&pbuff[0] %x\n", &pbuff[0]); pbuff = "cde"; //可以改变字符指针的指向。 printf("可以改变字符指针的指向pbuff %s\n", pbuff); printf("字符指针的地址&pbuff %x\n", &pbuff); printf("字符指针所指字符串常量的首地址&pbuff[0] %x\n", &pbuff[0]); //pbuff[1] = 'x'; //这句是错的,不能通过指针改变字符串常量 //即"abc" "cde"是两个字符串常量存在不同的内存区域中,字符指针可以指向这两个不同的字符串, //但不能改变字符串常量。 char buff[20] = "xyz"; printf("buff %s\n", buff); buff[1] = 'c'; //这里"xyz"是变量,可以改变。 printf("可以改变字符数组内的字符buff %s\n", buff); printf("字符数组名地址&buff %x\n", &buff); printf("字符数组首地址&buff[0] %x\n", &buff[0]); //buff = "ijk"; //错误,字符数组名是常指针,不能改变其指向。 return 0; }
输出:
pbuff abc
字符指针的地址&pbuff 12ff7c
字符指针所指字符串常量的首地址&pbuff[0] 42201c
可以改变字符指针的指向pbuff cde
字符指针的地址&pbuff 12ff7c
字符指针所指字符串常量的首地址&pbuff[0] 422ff4
buff xyz
可以改变字符数组内的字符buff xcz
字符数组名地址&buff 12ff68
字符数组首地址&buff[0] 12ff68