指针访问数组

指针访问数组有几下几点不同:

1.通过指针变量,无法获取到指针指向的内容的大小;

2.int *  是确定指针所要寻找的内容的大小,和指针的算数时所需要跳转的字节数量;

3.指针变量是变量可以通过自增方式访问地址名,数字名不能自增。

指针是从高到低分配,却从低到高存储的。这个可以通过语句来表达:

int a = 3;

int b = 5;

int c = 8;

printf("%p\n", &a);

printf("%p\n", &b);

printf("%p\n", &c);

通过输出我们可以看出a比b大4个字节,说明a比b高,那么如果把int b = 8; 改为int b = 0x78563412; 输出的又变成什么了呢。。其实指针就是一个8字节的内存,将16进制的b放到内存当中输出,就是12345678,存储是低位开始,分配写入时却是从高到低,这样就更加让我们理解指针的定义了。

但是我们还需要注意一点,指针不能对long 进行间接寻址,例代码如下:

 long x = a;

short *p3 = x;

printf("*p3 = %d\n", *p3);

这样就是错误的,系统会提示  Incompatible integer to pointer convwesion initializing 'short * with an expression of type 'long'; 错误的东西,一定要提醒自己忘记,每天早上打一遍代码,告诉自己我要忘了它!!

请思考:你们知道字符串是什么吗?谁能告诉我明确的答案?

其实,字符串就是一个一维数组,char string[] = "iphone" 和 char string[] = {'i', 'p', 'h', 'o', 'n', 'e'}; 他们是一样的,对吗?我们知道字符串“iPhone” 是占内存的,那么你们知道string也是需要占内存的。 

char *string1[] = “iPhone”; //字符串数组,保存的是首地址,存的是'i' 的地址;

还有一点,一旦常量产生了,所有的地址都在这里取,例:printf("%p\n", "iphone"); 不管我们写多少遍这个代码,“iphone”所存的地址都是同一个,需要字符串的时候都是从这里取的,则指针*(string1 + 1) = 'x' 只能读取,不能改变原有的数。

char *string[3] = {"iphone", "android", "win8"};  这个指针分配的是24个字符。可以用循环将他们的地址都输出出来:

for (int i = 0; i < 3; i++) {

printf("%s\n", strings[i]);

printf("%p\n", strings[i]);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值