#define dPS struct s * typedef struct s * tPS

#define dPS struct s * 

dps p1,p2

 typedef struct s * tPS;   

tps p3,p4

比较两者的异同点

以上两种情况的意图都是要定义dPS 和 tPS 作为一个指向结构s指针。  
但只有typedef实现了目的。
第一个扩展为  struct s * p1, p2;  

上面的代码定义p1为一个指向结构的指,p2为一个实际的结构,这也许不是你想要的。第二个例子正确地定义了p3 和p4 两个指针。


2.设有如下定义char *aa[2]={"abcd","ABCD"};则以下说法正确的是(D)

A)aa数组的元素的值分别是“abcd”和“ABCD”。

B)aa是指针变量,它指向含有两个数组元素的字符型一维数组。

C)aa数组的两个元素分别存放的是含有4个字符的一维字符数组的首地址。

D)aa数组的两个元素中各自存放了字符'a'和'A'的地址。

b不是两个数组元素,c存放的应该是5个字符,不是4个字符  

数组指针

  一:数组指针:数组名本身就是一个指针,指向数组的首地址。注意这是声明定长数组时,其数组名指向的数组首地址是常量。而声明数组并使某个指针指向其值指向某个数组的地址(不一定是首地址),指针取值可以改变。
  二:数组指针:是指向数组的一个指针,如int (*p)[10] 表示一个指向10个int元素的数组的一个针。 

指针数组

    一个数组,若其元素均为指针类型数据,称为指针数组。 也就是说,指针数组中每一个元素都相当于一个指针变量。其详细形式应该如下: *a[0], ...*a[n]. 每一个数组里面存储的是其指向的地址;一维指针数组的定义形式为:类型名 *数组名[数组长度]
例如:int *p[4],由于[]比*优先级更高,因此p先与[4]结合,形成p[4]的形式,这显然是数组形式。然后再与p前面的*结合,*表示此数组是指针类型的,每个数组元素都指向一个整型变量。只存在p[0]、p[1]、p[2]...p[n-1],而且它们分别是指针变量可以用来存放变量地址
 

程序如下

#include

#include
int main()
{
char *aa[2]={"abcd","ABCD"};


printf("%s\n",aa[0]);
printf("%c\n",*aa[0]);
printf("%c\n",*aa[1]);
 
  char s[5]="abcd" ;
return 0;
}

输出结果:

abcd

a

A
Press any key to continue



你可能感兴趣的:(c,面试题)