IOS开发教程之C语言数组和字符串

2020-01-14 14:37:59刘景俊

a=a[0]=&a[0][0] a[1]=&a[1][0]

关于多维数组,其实可以以此类推,在此不再赘述。

字符串

在C语言中是没有字符串类型的,如果要表示字符串需要使用char类型的数组,因为字符串本身就是多个字符的组合。但是需要注意的是字符串是一个特殊的数组,在它的结束位置必须要加一个””(ASCII中0是空操作符,表示什么也不做)来表示字符串结束,否则编译器是不知道什么时候字符串已经结束的。当直接使用字符串赋值的时候程序会自动加上””作为结束符。


//
// main.c
// ArrayAndString
//
// Created by KenshinCui on 14-7-06.
// Copyright (c) 2014年 Kenshin Cui. All rights reserved.
//

#include <stdio.h>

int main(int argc, const char * argv[])
{

  char a[] = {'K','e','n','s','h','i','n',''};
  printf("%s",a); //结果:Kenshin,注意使用%s输出字符串内容,如果换成整形输出格式其实输出的是a的地址
  printf("n");
  printf("address=%x", a); //结果:address=5fbff890
  printf("n");
  //后面的绝对不能省略,如果没有则会出现如下情况
  char b[] = { 'I', 'a', 'm'};
  printf("%s",b); //没有按照期望输出,多了一些垃圾数据,在当前环境打印结果:IamKenshin
  printf("n");
  printf("address=%x",b); //结果:address=5fbff88d
  printf("n");
  //直接赋值为字符串,此时不需要手动添加,编译器会自动添加
  char c[] = "Kenshin";
  printf("c=%s",c); //结果:c=Kenshin
  printf("n");
  
  //二维数组存储多个字符串
  char d[2][3]={"Kenshin","Kaoru","Rose","Jack","Tom","Jerry"};
  
  
  return 0;
}

从上面代码注释中可以看到打印b的时候不是直接打印出来“Iam”而是打印出了“IamKenshin”,原因就是编译器无法判断字符串是否结束,要解释为什么打印出“IamKenshin”我们需要了解a和b在内存中的存储。

IOS开发教程之C语言数组和字符串

从图中我们不难发现由于a占用8个字节,而定义完a后直接定义了b,此时分配的空间连续,b占用3个字节,这样当输出b的时候由于输出完“Iam”之后并未遇到””标记,程序继续输出直到遇到数组a中的“”才结束,因此输出内容为“IamKenshin”。