指针数组个人理解

#include <stdio.h>

/*
声明了一个静态属性的 指针数组---static char *name [];
name[]是一个数组 ,其中的元素是指向char类型的指针,使用数组名 name[0] 就是地址+下标的表示方法

name[0] 表示的是name数组中的第0个元素 也就是第一个字符串的首地址

即name[0] 是name数组中的元素 它里面的内容是一个地址(因为 name是一个指针类型的一维数组)

既然name[0] 其实是一个地址,那么name[0][0] 实质上也是 地址+下标的方法

它的值应该是一个元素 假设第一个字符串 放在名为 S1的一位数组中

那么 name[0] 等价于 &S1 (它是地址), 而 name[0][0] 就是 S1[0] (它是元素) 同理 name[0][3] 应该是s1[3] 也就是e

只不过 S1是我们自己假设的一个名字,程序中并没有定义,所以我们看不到,但是程序在存放字符串的时候是按照一维数组这样分配空间的
*/
static char *name[]= {
"illegal month",
"January","February","March",
"April","May","June","July",
"August","September","October",
"November","December"
};

void main()
{
  int i,n;
  void choose_month(int);
  printf("please enter a month number!\n");
  scanf("%d",&n);

  if(n<1 || n>12){
    printf("ERROR!The wrong month!");
  }
  else
    choose_month(n);
  printf("\n");
}

void choose_month(int n)
{
  int k,j;

  for(k=n,j=0; name[n][j] != ‘\0‘;j++){
  printf("%c",name[n][j]);
  }
}

时间: 2024-08-02 01:31:50

指针数组个人理解的相关文章

数组指针与指针数组深度理解参考

数组指针和指针数组的区别:http://www.cnblogs.com/mq0036/p/3382732.html 指针数组和数组指针的区别:http://www.cnblogs.com/Romi/archive/2012/01/10/2317898.html

用指针数组保存字符串并将字符元素打印输出

<span style="font-size:18px;">#include<stdio.h> void main() { //指针数组定义 char *book[4]={"C Programming Language","Assembly Language","Java Language","Natural Language"}; int n=4;//指针数组元素的个数 int r

数组内存申请和释放,指针数组和数组指针

总结 对于指针数组的理解:按照字面意思,首先是指针,其次是数组,就表明这是一个数组,不过数组里面存储的指针.``` // 使用指针数组 int **ptr = new int*[4]; for(int i = 0; i < 4; ++i) { *(ptr+i) = new int [3]; }```如代码所示:new int * [4],表明这是一个数组,数组里面存储的是 int *类型的指针.而等号左值 int ** ptr,首先要看(int *)*ptr ,表明这一个指针,其指向了int *

关于理解指针数组,数组指针,数组名,二维数组的一些技巧。

/*************关于数组名***************/ int a[3] = {1, 2, 3} 1.数组名代表数组第一个元素的地址,注意,不是数组地址(虽然值相等),是数组第一个元素地址,a 等同于 &a[0]; a+1是第二个元素的地址.比第一个元素地址a(或者&a[0])超出了一个整型指针的大小,在这里是4个字节(byte) cout << a << endl;会输出数组第一个元素地址. 2.取址符号&. &a是数组的地址,注意

指针数组的简单理解

1 #include <stdio.h> 2 /* 3 研究类型,步长,数组名和二级指针的关系 4 */ 5 int main(void) 6 { 7 char *p[4] = {"1234","sq34","d234","4234"}; 8 //万变不离其中:数组名 == 首元素的地址 9 //1.整体研究 10 printf("sizeof(p) = %d\n",sizeof(p));//p

深入理解 [指针函数] 、[函数指针]、[指针的指针]、[指向指针数组的指针]

指针函数 1.指针函数是指带指针的函数,即本质是一个函数.当一个函数声明其返回值为一个指针时,实际上就是返回一个地址给调用函数,以用于需要指针或地址的表达式中. 函数返回类型是某一类型的指针: 格式: 类型标识符  *函数名(参数表) int *match(void *key_x,void *key_y); 解析:首先来说它是一个函数,只不过这个函数的返回值是一个地址值.函数返回值必须用同类型的指针变量来接受,也就是说,指针函数一定有函数返回值,而且,在主调函数中,函数返回值必须赋给同类型的指针

C#委托与C语言函数指针及函数指针数组

C#委托与C语言函数指针及函数指针数组 在使用C#时总会为委托而感到疑惑,但现在总新温习了一遍C语言后,才真正理解的委托. 其实委托就类似于C/C++里的函数指针,在函数传参时传递的是函数指针,在调用的时候通过指针访问这个函数. 在C语言中函数指针的申明如下: //可以理解为申明一个指着变量 Func ,它的类型是 返回Type(可以为 void )类型的参数,接收 (Type one,Type two,...)类型的//参数(可以不接受参数). Type *Func(Type one,Type

qsort 函数的使用——对普通数组、指针数组、二维数组中的元素进行排序

在ANSI C中,qsort函数的原型是 #include <stdlib.h> void qsort(void *base, size_t nmemb, size_t size, int (*compar) (const void *, const void *)); 解释:qsort函数对含有nmemb个元素的数组进行排序,而base指针指向数组的第一个元素.这个数组的元素个数由size指定. compar函数对qsort的比较操作进行定义,所以可以定制数字的比较,字符串的比较,甚至结构体

指针数组和数组指针

指针数组:首先它是一个数组,数组的元素都是指针.它是“储存指针的数组”的简称.int *p1[10];数组指针:首先它是一个指针,它指向一个数组.它是“指向数组的指针”的简称.   int (*p2)[10]; 这里需要明白一个符号之间的优先级问题,关键在于p1.p2先和谁结合.“[]”的优先级比“*”要高.p1 先与“[]”结合,构成一个数组的定义,数组名为 p1,int *修饰的是数组的内容,即数组的每个元素.那现在我们清楚,这是一个数组,其包含 10 个指向 int 类型数据的指针,即指针