首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于C语言指针(真的好难懂)解决思路

2013-04-26 
关于C语言指针(真的好难懂)#include stdio.h#include conio.hvoid main(){char* psz[45]{zero,one

关于C语言指针(真的好难懂)
#include <stdio.h>
#include <conio.h>
void main()
{
char* psz[45]={"zero","one","two","three","four",
                         "five","six","seven","eight","nine","zero"};
for(int i=0;i<10;i++)
printf("%s\t",psz[i]);
}
 像上面这段代码,一个char类型指针,指针是按照一个个字符保存的吗?不然为什么我*PSZ[]里面输入5,或者10都不行呢,而zero-nine刚好是45个字符才行的!  但是如果是按照字符保存的话,我打印PSZ【i】,为什么又是字符串呢,求解释,越详细越好,对指针一知半解。 C 指针 存储
[解决办法]
楼主定义的数组是一个指针数组,每一个数组元素都是一个字符型指针,可以指向任意字符串的首地址
psz[i]表示的是第i个元素,也就是第i个指针(0<=i && i<45)
在你的定义中,你定义了一个一共有45个指针变量的数组,而不是zero-nine、zero一共有45个字符。
另外,当字符指针指向字符串的时候,该指针变量中存放的首字符的地址
[解决办法]
char * 的数组类型代表数组元素存储了字符串的首地址,通过每个首地址的指针可以访问每个字符串,不是像你说的那样每个元素储存一个字符
[解决办法]
char str1[] = "hello"; // 这个表示定义了一个字符数组,每个元素就是一个字符,比如char[0]就是'h',char[1]就是'e'等等;C风格的字符串是通过结束符'\0'来表示结束的,所以往往只需给出一个字符指针即可表示一个字符串,字符串的内容就是从这个字符指针指向的字符开始一直到遇到结束符'\0'。这个数组最后隐含一个结束符'\0',所以数组的大小是5+1=6;
char *str2[2] = {"hello","world"}; // 则表示一个字符指针数组,这个数组有两个元素,每个元素就是一个字符指针,所以str2[0]表示一个char*,这个指针指向第一个字符串的首字母'h',而str2[1]就表示指向'w'了
[解决办法]
1. 类型分析


char const* psz[45]; 
//psz是一个数组。它有45个元素,元素的类型是char const*


2.数组的初始化

char const * psz[45] = {"hehe"};//psz[0]保存了"hehe"的地址, psz[1]...psz[44]都是为0


3. %s期待一个合法的字符串

printf("%s", "hehe"); //ok
printf("%s", NULL); //not good

热点排行