开始:
1.C语言中规定数组变量代表数组所在内存位置的首地址
char str[20] = "hello world"; str==&str[0] *str=str[0]
参考:https://www.imooc.com/article/30475
2.char *s 与 char a[ ] 的本质区别:
当定义 char a[10 ] 时,编译器会给数组分配十个单元,每个单元的数据类型为字符,一个字节。。
而定义 char *s 时, 这是个指针变量,只占四个字节,32位,用来保存一个地址。。
sizeof(a) = 10 ;
sizeof(s) = ?
当然是4了,编译器分配4个字节32位的空间,这个空间中将要保存地址。
#include <iostream> using namespace std; int main() { cout << "**********字符数组-字符串********** "; //char* str= "string";//字符串指针,str变量的类型是char* char str[] = "string"; //cout << str; printf("字符数组str[]为:%s ", str);//系统自动输出str指向的字符串 printf("字符数组的第一个字符:%c ", *str);//str指针的值是字符串“string”的首地址 printf("字符数组的第一个字符:%c ", str[0]);//*str和str[0]都表示访问str[]数组的第一个字符 printf("字符数组的第二个字符:%c ", *(str+1)); printf("字符数组的第一个字符:%c ", str[1]);//*str+1与str[1]表示访问str[]数组第二个字符,*str+n同理 cout << ' '; cout << "**********字符串指针数组-字符串********** "; char* str1[] = {"hello","my","cat","ok"}; int i1; i1 = sizeof(str1); printf("数组str1的长度为:%d ", i1); //在printf中,只要给出一个字符串的首地址,就会自动输出该字符串 printf("字符指针数组第一个指针指向的元素%s ", str1[0]);//str1[0]是第一个指针,表示第一个字符串的首地址 printf("字符指针数组第一个指针指向的元素%s ", *str1);//str1是第一个指针元素的首地址,*str1相当于是第一个指针元素str1[0],表示第一个字符串的首地址 printf("字符指针数组第二个指针指向的元素%s ", str1[1]);//str1[1]是第二个指针,表示第二个字符串的首地址 printf("字符指针数组第二个指针指向的元素%s ", *(str1 + 1));//str1 + 1是第二个指针元素的首地址,*(str1+1)相当于是第二个指针元素str1[1].之后的同理 printf("字符指针数组第一个指针指向的元素的第一个字符%c ", *(str1[0]));//在字符串首地址str1[0]前加*,表示获取该字符串的第一个字符元素 printf("字符指针数组第一个指针指向的元素的第一个字符%c ", **(str1));//在字符串首地址*str1前加*,表示获取该字符串的第一个字符元素 printf("字符指针数组第一个指针指向的元素的第二个字符%c ", *((str1[0])+1));//字符串首地址str1[0]+1表示该字符串的第二个字符元素的地址,前加*, 表示获取该字符串的第二个字符元素 printf("字符指针数组第一个指针指向的元素的第一个字符%c ", *(*(str1)+1));//在字符串首地址*(str1)+1表示该字符串的第二个字符元素的地址前加*,, 表示获取该字符串的第二个字符元素 return 0; }
还有疑问:如何求*str1[]中每个字符串的长度?