#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include <string.h>
main()
{
char **p2;
char *name[] =/*定义指针变量时的*号并没有指向的含义,
只是让计算机知道name[]是个指针(地址),好为分配存储空间和接下来的操作做准备。
你就当计算机可以直接理解c语言,你把中间层和底层都当成透明的,这样比较好理解记
忆c的语法,不然你就始终会纠结,中间层和底层是怎么回事。*/
{ "Follow me" ,"BASIC",
"Greatwall","FORTRAN",
"Computer design" };
p2 = name;
printf("%s", *++p2);
/* c语言的指针问题的本质:1.已经定义好的变量,计算机是知道其地址的,直接运用变量名,
计算机就会直接找到其地址中的内容。2.指针问题的本质就是间接,直接,还是多重间接
寻址的问题,有*号,(如*p,p=&a)就代表得到的内容不是p中的内容,而是以p中的内容为
地址,寻找到的存储单元中的内容,则*p则称为指向a的指针,p为指针变量。也可以这样理
解,指针就是地址,指针变量里面存的也就是地址。
*/
/*字符型数组的数组名是常量,不能改变。所以更不能直接给数组名赋初值,
只能在定义的时候给其赋初值,如下。
char format[ ] = “ a = %d , b = %f \n ” ;
printf (format, a, b); 正确!
format = “c=%c, d=%u\n”; 错误!
printf ( format , c , d ) ; */
/*数组定义后, 在编译时分配内存单元,即有确定
的值。对指针变量定义后,尽管系统给其分配了
内存单元,但在没有明确指向前,其值不确定。
char str[ ] = “Hellow”;
正确: char str[10] ;
scanf ( “ %s ”, str ) ;
错误: char *a ;
scanf ( “ %s ”, a ) ;
可改为: char *a , str[10] ;
a = str;
scanf ( “ %s ”, a )*/
/*
char *string ;
string = “I Love China” ;
将字符串的首地址赋给指针变量 string 。
说明:
尽管没有直接定义字符型数组,但实际上C语言对字符常量均按字符数组来处理。即在内存中开
辟了一个字符数组用来存放字符串常量。*/
}
c语言中指针,字符串的指针和指向字符串的指针变量的问题
于 2024-05-12 13:48:45 首次发布